问答题

试题五(共 15 分)   阅读下列说明和C 函数代码,将应填入 (n) 处的字句写在答题纸的对应栏内。   【说明】   对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个结点,且每个结点仅访问一次的过程。函数InOrder()借助栈实现二叉树的非递归中序遍历运算。   设二叉树采用二叉链表存储,结点类型定义如下:   typedef struct BtNode{   ElemType data; /*结点的数据域,ElemType的具体定义省略*/   struct BtNode *lchild,*rchild; /*结点的左、右孩子指针域*/   }BtNode, *BTree;   在函数InOrder()中,用栈暂存二叉树中各个结点的指针,并将栈表示为不含头结点   的单向链表(简称链栈),其结点类型定义如下:   typedef struct StNode{ /*链栈的结点类型*/   BTree elem; /*栈中的元素是指向二叉链表结点的指针*/   struct StNode *link;   }StNode;   假设从栈顶到栈底的元素为 en、en-1、…、e1,则不含头结点的链栈示意图如图5-1所示。
【C函数】 int InOrder(BTree root) /* 实现二叉树的非递归中序遍历 */ { BTree ptr; /* ptr用于指向二叉树中的结点 */ StNode *q; /* q暂存链栈中新创建或待删除的结点指针*/ StNode *stacktop = NULL; /* 初始化空栈的栈顶指针stacktop */ ptr = root; /* ptr指向二叉树的根结点 */ while ( (1) || stacktop != NULL) { while (ptr != NULL) { q = (StNode *)malloc(sizeof(StNode)); if (q == NULL) return -1; q->elem = ptr; (2) ; stacktop = q; /*stacktop指向新的栈顶*/ ptr = (3) ; /*进入左子树*/ } q = stacktop; (4) ; /*栈顶元素出栈*/ visit(q); /*visit是访问结点的函数,其具体定义省略*/ ptr = (5) ; /*进入右子树*/ free(q); /*释放原栈顶元素的结点空间*/ } return 0; }/*InOrder*/

【参考答案】


热门 试题

问答题
试题六(共15分)阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG 和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG 和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如下图所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【C++代码】class Matrix{ 各种格式的文件最终都被转化为像素矩阵 此处代码省略};class ImageImp{public:virtual void doPaint(Matrix m) = 0; 显示像素矩阵m};class WinImp : public ImageImp{public:void doPaint(Matrix m){ *调用windows系统的绘制函数绘制像素矩阵* }};class LinuxImp : public ImageImp{public:void doPaint(Matrix m){ *调用Linux系统的绘制函数绘制像素矩阵* }};class Image {public:void setImp(ImageImp *imp){ (1) = imp;}virtual void parseFile(string fileName) = 0;protected:(2) *imp;};class BMP : public Image{public:void parseFile(string fileName){ 此处解析BMP 文件并获得一个像素矩阵对象m(3) ; 显示像素矩阵m}};class GIF : public Image{ 此处代码省略};class JPEG : public Image{ 此处代码省略};void main(){ 在windows操作系统上查看demo.bmp图像文件Image *image1 = (4) ;ImageImp *imageImp1 = (5) ;(6) ;image1->parseFile( demo.bmp );}现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计(7)个类。
问答题
试题七 (共 15 分 )阅读下列说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG 和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG 和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计所得类图如图7-1所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【Java 代码】class Matrix{ 各种格式的文件最终都被转化为像素矩阵 此处代码省略};abstract class ImageImp{public abstract void doPaint(Matrix m); 显示像素矩阵m};class WinImp extends ImageImp{public void doPaint(Matrix m){ *调用windows系统的绘制函数绘制像素矩阵* }};class LinuxImp extends ImageImp{public void doPaint(Matrix m){ *调用Linux系统的绘制函数绘制像素矩阵* }};abstract class Image {public void setImp(ImageImp imp){(1) = imp; }public abstract void parseFile(String fileName);protected (2) imp;};class BMP extends Image{public void parseFile(String fileName){ 此处解析BMP文件并获得一个像素矩阵对象m(3) ; 显示像素矩阵m}};class GIF extends Image{ 此处代码省略};class JPEG extends Image{ 此处代码省略};public class javaMain{public static void main(String[] args){ 在windows操作系统上查看demo.bmp图像文件Image image1 = (4) ;ImageImp imageImp1 = (5) ;(6) ;image1.parseFile( demo.bmp );}}现假设该系统需要支持 10 种格式的图像文件和 5 种操作系统,不考虑类 Matrix 和类javaMain,若采用桥接设计模式则至少需要设计(7)个类。