[函数说明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)”或其等价形式。