Status push(SqStack *S, ElemType *e){
// int STACKINCREMENT = 20;
if(S->top - S->bottom >= S->stacksize - 1){
S->bottom = (ElemType *)realloc(S->bottom, (STACKINCREMENT + STACK_SIZE) * sizeof(ElemType));/*栈满 ,追加存储空间*/
if(!S->bottom) return ERROR;
S->top = S->bottom + S->stacksize; 为什么不是S->top = S->bottom + S->stacksize-1?
S->stacksize += STACKINCREMENT;
}
*S->top = *e;
S->top++;
return OK;
}
这里不太对的是判断栈满的语句吧。
一般栈顶是在栈数据的之上一格,所以判断栈满直接s.top - s.bottom >= s.stacksize就行了,不用再减一了
函数返回前最后两句说明,再次进入函数时,S->top还没有使用, 因此你的判断条件应该和realloc之后赋值一致,应该是S->top = S->bottom + S->stacksize-1, 单步跟踪一下吧。
*S->top = *e;
S->top++;