望大神帮我看看这个关于栈的问题
(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编辑过]