首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言中栈操作的一个大疑义?

2012-09-04 
关于C语言中栈操作的一个大疑问???C/C++ codeint Pop(SqStack *S,StkType *ch){if(S-top S-base)retu

关于C语言中栈操作的一个大疑问???

C/C++ code
int Pop(SqStack *S,StkType *ch){        if(S->top == S->base)                return 0;        --S->top;        *ch=*S->top;        return 1;}


这是出栈的源码----《数据结构(C语言版)》

作用是若栈不为空,就删除S的栈顶元素,但是这里它只是将top指针往下移了一步,并没有起到删除栈顶元素的作用,如果此时再将S->top++,同样可以再访问到原来的数据。

请各位大侠们说说这个怎么回事?

[解决办法]
你如果不压入数据不就覆盖了之前弹出的数据区了吗,并且湛一般是以数组实现的所以只要确定数组中元素我们就知道此时栈中元素个数,所以仅仅修改size值就足以了这会决定此时我们逻辑上的栈的数据多少
[解决办法]
你进行top++操作应该是在入栈时,那就一定会再覆盖上去一个新值。栈往往就是这样循环再利用的,没必要一定要在出栈时清除那个单元,只要标记好栈顶位置就ok了

[解决办法]
是它的标记在移动去取下一个值,逻辑删除,你如果要插入的话是采取覆盖的形式覆盖掉那个数据。就这么简单。
[解决办法]
楼主想要删除栈顶元素?
那我冒昧的问一句,在楼主看来,栈顶元素被删除后应该剩下什么?一块废铜?一个黑洞?还是一个奇点?


[解决办法]
S->top++该操作会在你压栈时操作,压栈时会将新的数据存放到该栈顶指针指向的位置,所以上一次的数据就会被覆盖而存放新的数据。
[解决办法]
探讨
楼主想要删除栈顶元素?
那我冒昧的问一句,在楼主看来,栈顶元素被删除后应该剩下什么?一块废铜?一个黑洞?还是一个奇点?

[解决办法]
free malloc 来的内存是同样没有 overwrite 原数据

子程序退出时 也没有 overwrite stack 的数据

os 删除文件时 也没有 overwrite 原来文件的数据


lz 说说这个怎么回事?

为了效率,只要擦除 标记即可
[解决办法]
空、0、被free的内存、……,它们也是客观存在的值;而不是虚无。
[解决办法]
探讨
我之前的理解是:删除栈顶元素就是将原来处于栈顶的那个元素值去掉,设为空,或者0。然后将那个内存释放掉,让它不再属于这个栈。
现在看了这么多大侠们的解释,我有点懂了,其实在内存里面那些没有用到的空间里,并不是每个地方都是空的,而是有值在那里,当我们要用的那些空间时,我们就overwrite它。所以这里也是一样。
同样在销毁一个栈时,我们只需free(S.base),将原来malloc的空间释放掉。
不知道我的理解正确否???

非常感谢各位大侠们的支持。。

热点排行
Bad Request.