顺序栈 进栈函数

顺序栈 入栈函数
顺序栈 入栈函数

代码如下  里面有注释的地方求解释

typedef int EleType;
typedef struct{ EleType *base;EleType *top;int StackSize; } STACK;
int PUSH(STACK *s,EleType e)
{
if((s->top)-(s->base)>=(s->StackSize))
{
             //s->top=s->base+s->StackSize;   为什么这句不可以放在这里,而必须放到下面?
s->base=(EleType*)realloc(s->base,(s->StackSize+STEP)*sizeof(EleType));//不够,再分配
if(!s->base) return 0;
s->top=s->base+s->StackSize;//另外我觉得这里可以省略,s->top就是下一个入栈的地址啊
s->StackSize+=STEP;
}
*(s->top)++=e;
return 1;
}

------解决方案--------------------
realloc()可能改变s->base的值,因此s->top会变成无效地址,必须重新设置
------解决方案--------------------
 //s->top=s->base+s->StackSize;   为什么这句不可以放在这里,而必须放到下面?
这句必须放在下面,下一行的realloc可能会改变s->base,要知道realloc不能保证s->base不改变。

s->top=s->base+s->StackSize;//另外我觉得这里可以省略,s->top就是下一个入栈的地址啊
这行也是一样,因为s->base可能改变了,所以需要更新s->top的地址。