问题 填空题

【说明】 本题给出四个函数,它们的功能分别是: 1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。 2.int pop(PNODE*top,int*e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。 3.int enQueue(PNODE*tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。 4.int deQueue(PNODE*tail,int*e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。 以上四个函数中,返回值为。表示操作成功,返回值为-1表示操作失败。 栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为: typedef struct node { int value; struct node * next; } NODE, * PNODE; 【函数1】 int push(PNOOE * top,int e) { PNODE p = (PNODE) malloc (sizeof (NODE)); if (! p) return-1; p->value=e; (1) ;. *top=p; return 0; } 【函数2】 int pop (PNODE * top,int * e) { PNODE p = * top; if(p == NULL) return-1; * e = p->value;   (2) ; free(p); return 0; } 【函数3】 int enQueue (PNODE * tail,int e) { PNODE p,t;t= *tail;p = (PNODE) malloc(sizeof(NODE));if(!p) return-1;p->value=e;p->next=t->next;(3) ;* tail = p;return 0; } 【函数4】 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; }

答案

参考答案: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 (1)插入结点p后,p应当指向插入前头结点,所以填入p ->next=*top。(2)出栈后,头指针应指向它的下一结点,所以填入 *top=p->next或*top=(*top)->next。(3)入队时,需要将结点插入队尾,所以应当填入(*tail)->next=p或t->next=p(t也指向尾结点)。(4)出队时,需要删除队头结点,通过(*tail)->next可以得到对队头结点的引用。(4)处是正常删除队头结点的情况,空格处应填入头结点指向下一结点的指针,即p->next或(*tail)->next->next。(5)处是需要考虑的特殊情况,即队列中最后一个元素出队后,要更新队尾指针,即填入*tail=p或*tail=(*tail)->next。

单项选择题 A1/A2型题
多项选择题