为什么取栈顶元素要用 e=*(S.top-1)不是应该是e=*S.top才对么?
struct zhan//定义一个栈的结构体
{
int *base;//在栈构造之前和销毁之后,base的值为NULL
int *top;//栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
};
struct zhan S;
..................................................................................
int GetTop()
{
int e;
if(!S.stacksize)
printf("栈不存在!!!\n");
else
if(S.top==S.base)//判断栈是否为空,为空则返回错误
return ERROR;
e=*(S.top-1);
printf("栈顶元素为%d\n",e);
return OK;
}
..................................................................................
int Push()
{
if(!S.stacksize)
printf("栈不存在!!!\n");
else
{
int i,j,e;
printf("请输入要插入的数的个数:");
scanf("%d",&i);
printf("请输入要插入的数:\n");
for(j=1;j<=i;j++)
scanf("%d",&e);
if(S.top-S.base>=S.stacksize)//栈满,追加存储空间
{
S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base)
exit(OVERFLOW);//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;//头指针加1,插入元素成功
printf("插入元素成功!!!\n");
}
return OK;
}
..................................................................................
int Pop()
{
if(!S.stacksize)
printf("栈不存在!!!\n");
else
{
int e;
printf("请输入要删除的数:\n");
scanf("%d",&e);
if(S.top==S.base)//判断栈是否为空,空则返回错误
return ERROR;
e=*--S.top;//头指针减1,删除元素成功
}
return OK;
}
栈顶应该指向分配空间最后一个元素的首地址 为什么取栈顶要*(S.top-1);
还有出栈的时候也是同样的迷惑 e=*--S.top;//头指针减1,删除元素成功
应该是e=*S.top--才对啊