题库 题库

【简答题】

试题五
阅读下列说明和C代码,将应填/k_(n)—处的字句写在答题纸的对应栏内。
[说明]
  本题给出四个函数,它们的功能分别是:
  ①int push(PNODE *top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
  ②int pop(PNODE *top,int oe)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
  ③int enQueue(PNODE *tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
  ④int deQueue(PNODE *tail,int *e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为0表示操作成功,返回值为-1表示操作失败。栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:
typedef struct node{
 int value;
 struct node *next;
}NODE,*PNODE;

[函数①]
int push(PNODE *top,int e)
{
 PNODE p = (PNODE)malloc(sizeof(NODE));
 if(!p) return –1;
 p->value = e;
 ___(1)___;
 *top = p;
 return 0;
}

[函数②]
int pop(PNODE *top,int *e)
{
 PNODE p = *top;
 if(p == NULL) return –1;
 *e = p->value;
 ___(2)____;
 free(p);
 return 0;
}

[函数③]
int enQueue(PNODE *tail,int e)
{
 PNODE p,t;
 t = *tail;
 p = (PNODE)malloc(sizeof(NODE));
 if(!p) return –l;
 p—>value = e;
 p—>next = t—>next;
 ____(3)____;
 *tail = p;
 return 0;
}

[函数④]
int deQueue(PNODE *tail,int *e)
{
 PNODE p,q;
 if((*tail)->next == *tail)return –1;
 p = (*tail)->next;
 q = p->next;
 *e = q->value;
 ___(4)___ = q->next;
 if(*tail = q) ___(5)___;
 free(q);
 return 0;
}

参考答案

(1) p->next = *top
(2) *top = p->next 或 *top = (*top)->next
(3) t->next = p 或 (*tail)->next = p
(4) p->next 或 (*tail)->next->next
(5) *tail = p 或 *tail = (*tail)->next

相关试题