C语言 栈
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
//进栈
void Push(SqStack *S,int e){
if (S->top-S->base>S->stacksize)
{
S->base=(int *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(int));
if (!S->base)exit(1);
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*S->top++=e;
}//Push
问题:1,stacksize到底是记录什么?如果是记录当前栈的长度的话,那push一个元素进去之后为什么不加1?
2,push里面用这句话S->top - S->base > S->stacksize来判断这个栈是否满栈?为什么?top是指向栈最后一个元素的下一个元素,假如现在栈的长度是10,单位0-9都有元素,即满栈,那top将指向单元10,但是这个单元没有申请,会不会出现什么问题?
[解决办法]
你的程序问题给你该了一下:
首先将栈设大一点,增量也设大一点;
其次将PUSH的这就话改一下:
s->top=s->base+s->stacksize/*-1*/;
运行正确.如果看的是严蔚敏老师的书的话,你看的不仔细.
前面说的错了,可能把你的问题和别人的问题混为一谈了,实在抱歉.