农村户口进城买房政策:关于数据结构进栈和出栈的问题 望赐教 (就剩20分了,您别嫌少)

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 20:37:39
栈的顺序存储
进栈:
s->elem[s->top++] (elem 是栈的指针)

这句话到底应该怎么理解 可以理解为一个数组吗

出栈:
s->elem[--s->top]

出栈为什么是 --s 呢 s->top-- 为什么不可以呢
如果理解为数字 从作后面减起 也说得通吧

真的想不明白了 望高手赐教

++ 和-- , 这种操作符! 放在变量的前面为:如i=1; 等式 ++i+2 =4 是先计算这个值,再执行等式的!
而 (i++)+2=3 是先计算等式,之后再计算i的值,等式计算后i的值才是 2

进栈:
s->elem[s->top++]
程序内部会这样分为两步执行:
s->elem[s->top];
s->top=s->top+1;

出栈:
s->elem[--s->top]
同样每为两步执行:
s->top=s->top - 1;
s->elem[s->top]

代码上看:s->top 是指向一个可用(空)的数据区!

在进栈时:
s->elem[s->top++] = 值

将值存入s->elem[s->top];原先指向的一个可用(空)的数据区.
再将值存入这个数据区!
之后执行:s->top=s->top+1; 又向前指向一个可用(空)的数据区.

出栈:
值 = s->elem[--s->top]

先s->top=s->top - 1; 指向一个存用数据的数据区.(后退一位)
再取值
值 = s->elem[s->top];
这样 s->top 又是指向这个数据区,而这个数据区的数据已被取出!

所以s->top 是指向一个可用(空)的数据区!而这个数据区注定会被进栈操作的新数据覆盖!

堆栈栈顶指针指向堆栈中最后一个元素的后一个,进栈时,先将元素存入,堆顶指针向后移动一个,出栈相反,堆顶指针先向前移一个,再将元素读出。所以要用--s->top先改变栈顶指针,再读数。

hszhsh说得不错,要搞清楚这个问题,必须知道以下三点:
1、由这两句代码可以看出,这是C或C++的代码,那么,数组的下标是从0开始的;
2、栈的栈顶指针指向最后进栈元素的下一个空间,即:空栈的栈顶指针指向下标为0的空间,含n个元素的栈的栈顶指针指向下标为n的空间。
3、++,--的前缀形式和后缀形式的区别。前缀形式是先作加减再取变量值,后缀形式是先取变量值,再做加减。

看来你的C没有搞好。--s->top,其实s->top先进行,再--,即使它在左边。要不理解可这样看--(s->top)。
在正常情况下s->top指向栈即将写入的空间,s->elem[s->top++] 理解成在s->elem[s->top]处写入,再s->top++;使这再指向后面的空位置(可写位置)。
出栈的时候, s->top是指向栈后面的空位置,必须先向前一位s->top减1,再对s->elem[s->top]操作。但是由于减1在前,所以合在一起就是s->elem[--s->top]