问题 填空题

[函数说明3.1]

假设两个队列共享一个循环向量空间(参见右图),其类型Queue2定义如下:

typedef struct

DateType data[MaxSize];

int front[2] ,rear [2];

Queue2;

对于i=0或1,front[i]和rear[i]分别为第i个队列的头指针和尾指针。函数EnQueue (Queue2*Q,int i,DateType x)的功能是实现第i个队列的入队操作。

[函数3.1]

int EnQueue (Queue2*Q,int i,DateType x)

//若第i个队列不满,则元素x入队列,并返回1; 否则返回0。

if (i<0 || i>1) return 0:

if (Q->rear [i] ==Q->front[ (1) ])

return 0:

Q->data[ (2) ]=x;

Q->rear[i]=[ (3) ];

return 1:

[函数说明3.2]

函数BTreeEqual(BinTreeNode *T1,BinTreeNode *T2)的功能是用递归法判断两棵二叉树是否相等,若相等则返回1,否则返回0。函数中参数T1和T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同并且对应结点的值也相同时才被认为相等。

已知二叉树中的结点类型BinTreeNode定义为:

struct BinTreeNode

char data;

BinTreeNode *left, *right;

;

其中data为结点值域,left和right分别为指向左、右子女结点的指针域。

[函数3.2]

int BTreeEqual(BinTreeNode* T1,BinTreeNode* T2)

if (T1==NULL && T2==NULL) return 1; //若两棵树均为空则相等

else if( (4) )return 0; //若一棵为空一棵不为空则不等

else if( (5) )return 1; //若根结点值相等并且左、右子树

//也相等则两棵树相等,否则不等

else return 0:

 

(5)处填()

答案

参考答案:TA->data==TB->data && BTreeEqual(TA->left, TB->left)&&BTreeEqual(TA->right, TB->right)

解析:

这一题共有两个函数,第一个函数是一个循环共享队列入队的问题,第二个函数是用递归法判断两棵二叉树是否相等的问题。

先分析第一个函数。空(1)所在if语句是判断能否入队,当队列0入队时,如果队列0队尾指针与队列1队头指针相等时,说明队列0无法入队; 当队列1入队时,如果队列1队尾指针与队列0队头指针相等时,说明队列1无法入队。因此空(1)处应填写“(i+1)%2”或“1-i”。空(2)和空(3)是入队操作,其操作步骤是先将元素x插入队列i队尾所指的位置,再将队尾“加1”。因此空(2)处应填写“Q->rear[i]”,由于是一个循环队列,空(3)处应填写“(Q->rear[i]+1)%Maxsize”。

再分析第二个函数。这一题比较简单,只需将程序注释转换成C语言即可得到答案。空(4)所处理的是若一棵为空,而一棵不为空则不相等,显然空(4)应填入“T1==NULL||T2==NULL”。空(5)处是一个递归调用,处理若根结点值相等并且左、右子树也相等则两棵树相等,因此空(5)处应填入“T1->data==T2->data&&BTreeEqual(T1->left,T2->left)&&BTreeEqual(T1->right,T2->right)”或其等价形式。

单项选择题
填空题