阅读下列说明和C代码,将应填入(n)处的字句写在对应栏内。 【说明】 本题给出四个函数,它们的功能分别是: 1.int push(PNODE*top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。 2.int

admin2012-12-10  31

问题 阅读下列说明和C代码,将应填入(n)处的字句写在对应栏内。
  【说明】
   本题给出四个函数,它们的功能分别是:
   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;
   }

选项

答案(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

解析 (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。
转载请注明原文地址:https://kaotiyun.com/show/XnjZ777K
0

最新回复(0)