标题:望大神帮我看看这个关于栈的问题
只看楼主
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
结帖率:66.67%
已结贴  问题点数:20 回复次数:3 
望大神帮我看看这个关于栈的问题
(1)书上说非空栈的栈顶指针始终指向栈顶元素的下一位置,第一张图里也有示图:

(2)但是在链栈里,S为什么又指向栈顶?——这么说吧,我的疑问都在下面的注释里,大佬帮看看。谢啦第二张图:

程序代码:
Status GetTop(LinkStack S,ElemType &e) { 
  if(!(S->top->next))   exit(ERROR);      
   S->top=S->top->next;  //这里先让top指向了它的next,相当于top现在该指向第二张图中S的下面(即第二层)   
   e=S->top->data;  //然后再把新的第二层top所指的结点的data给了e,那么这样一来返回的不就是第二层的数据了吗?而不是栈顶元素了。。。    
   return OK; 
} 

然后是删除
程序代码:
Status   Pop ( LinkStack *S, SElemType *e ) {  
    LinkStackPtr  p;  
    if ( StackEmpty( *S ))    return   ERROR;  
    *e = S->top->data;  //这儿先把top(也就是第二张图里的第一层)所指的数据给了e   
    p = S->top;  
    S->top = S->top->next;   //然后在这里才让top指向它的next(即第二层),所以都是对栈顶操作,为啥一个是取第一层数据,一个是取第二层数据??
    free (p);    S->count - -;  
    return OK; 
} 


[此贴子已经被作者于2018-2-10 17:28编辑过]

搜索更多相关主题的帖子:  指向 top next 数据 
2018-02-10 17:21
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:10 
按照你的书上的设定,是不带头节点的链栈

如图所示,就是你书上的链栈的横向表达形式
GetTop 函数中,S->top = S->top->next 是因为 top 按照你书上的设定,是指向一个空的节点,它的下一个节点才是真正的栈顶,top 指向的节点本身是没有数据的
你书上的栈的表达挺麻烦的,base 没有存在的必要,因为在 base 之前的元素出去之前,base 是不能动的


[此贴子已经被作者于2018-2-10 19:37编辑过]

2018-02-10 19:31
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
得分:0 
回复 2楼 Jonny0201
哦哦,所以说抛开前面那些话,只看我那两个程序,Pop函数所描述的是没有头结点的,而GetTop函数里是有头结点的,是吧
2018-02-10 20:29
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:10 
回复 3楼 选调生
你的理解是对的。但是有一个词汇用的不准确。

不能说Pop函数所在的那个程序源代码里栈没有头结点,而GetTOP有头结点。应该说GetTop的链表会有一个没数据的头结点,而Pop的链表则是从头结点就开始存储数据。

换句话说,往栈内压入同样多的数据,GetTOP链表所要消耗空间回避Pop链表多一个结点。    而多这一个节点,会让代码好写一些。

φ(゜▽゜*)♪
2018-02-13 21:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484696-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.107363 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved