请问 pop函数为什么没有弹出栈顶的值呢?

来源:百度知道 编辑:UC知道 时间:2024/06/03 00:32:51
//pop函数:弹出并返回栈顶的值
double pop(void)
{
if(sp>0)
return val[--sp];
else
{
printf("error:stack empty ");
return 0.0;
}
}

这个pop函数中,返回的是return (--sp),那么无法返回栈顶的值了?因为--sp是先减再返回的嘛?为什么不写成return val[sp--]呢?
请大家指点一下啊!!

栈里 栈顶的值是存在val[sp - 1]里

栈底的值是存在val[0]里

当栈里只有一个值时 sp = 1

弹出栈底值时 返回 val[0]的值 ,弹出以后 sp = 0
栈就空了

返回值当然写成
return val[--sp];

sp为栈顶指针
它与数组元素的对应关系,应该是 val[0]是第1个元素.
这只是一个映射关系而已

比如sp = 1,就是有一个元素,那麼元素就应该是val[0]即,val[--sp]

栈顶指针一般是指向顶层元素的下一位的.比如栈为空时,sp=0,有1个元素时,sp=1