动态栈扩容后top与bottom的关系

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++;