关于C语言中栈操作的一个大疑义?
关于C语言中栈操作的一个大疑问???C/C++ codeint Pop(SqStack *S,StkType *ch){if(S-top S-base)retu
关于C语言中栈操作的一个大疑问???
C/C++ codeint 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的内存、……,它们也是客观存在的值;而不是虚无。
[解决办法]