【初级问题】入栈出栈 和入队出队 这4个算法是如何表示的 , 无法理解 请指教

youlingsxcn 2008-11-02 09:55:15
试题三

阅读下列说明和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作为返回出队元素使用。

以上四个函数中,返回值为0表示操作成功,返回值为-1表示操作失败。

栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:

typedef struct node{

int value;

struct node *next;

}NODE,*PNODE;

【函数1】

int push(PNODE *top,int e)

{

PNODE p=(PNODE)malloc (sizeof(NODE));

if (!p) return-1;

p-> value =e;

(1) ;. \ \(1)答案 p->next=*top 疑问:入栈不都是把结点 e给了 top 然后top++ ,这样表示: *top++=e

*top=p;

return 0;

}

【函数2】

int pop (PNODE *top,int *e)

{

PNODE p=*top;

if(p==NULL)return-1;

*e=p->value;

(2) ; \\ 疑问 这个怎么写? p的值都给了e了 。。顶点指针自减 。
free(p);

return 0;

}

【函数3】

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;

}

【函数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;

}

问题 3、4、5 实在不理解他这个如何表示 了 指教 ~~~谢谢~~
...全文
653 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
c_414669242 2009-04-06
  • 打赏
  • 举报
回复
来学习一下
码农自来也 2008-11-03
  • 打赏
  • 举报
回复
(1)栈是链表实现的,top++并不是指向你动态申请的内存地址,所以只能够先通过指针操作把你动态申请的节点的next指针指向top指向的节点,然后改变top是它指向刚申请的内存,只有这样才能形成一个新的链表
(2)(3) (4 )(5)的解答参见楼上的就可以了
liujianhui 2008-11-02
  • 打赏
  • 举报
回复
(2) *top=*top->netx; //栈顶指针下移
(3) t->next=p; 或 *tail->next=p; //新结点连接到队尾
(4) p->next=q->next; //辅助结点(头结点)指针后移
(5) p->next=p; //空队列中辅助结点(头结点)指针回指自身

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧