对栈的操作

来源:百度知道 编辑:UC知道 时间:2024/05/17 19:28:24
int Pop_SeqStack(PSeqStack s, DataType *x)
{
if(Empty_SeqStack(S))
return 0;
else
{
*x=S->data[S->top]
S->top--;
return 1;
}
}这个程序是用来删除栈中的栈顶元素,这是书本上面写的。我认为 DataType *x
是用来定义一个datatype类型的指针,其中x是用来存放数据x的地址的。后面的*x就是
用来表示地址x当中的元素。我认为这样完全没有必要,程序完全可以写成这样,也就是把*给去掉。而且我上机
了,这种结果是正确的。那么这两种表示方法有什么不一样吗,其中第一种写法有什么好处?而且书本上像这样的写法不知是一处。

出栈的作用是栈指针减一并获取栈顶的值,如果用DataType x = S->data[S->top],函数调用结束后x就被释放了,没有变量存储栈顶的值。
具体用法:
DataType val;
PSeqStack s;
Pop_SeqStack(s,&val);//执行出栈动作并将栈顶的值赋给val;

我觉得用指针的好处就是省下了一个datatype数据的空间而只用了一个很小用来存储地址的空间。新建一个指针比新建一个其他数据有效率。
我也是新手,这只是我个人的理解,希望高手也来说几句。