首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言 栈,该怎么处理

2012-04-19 
C语言 栈typedef struct{int *baseint *topint stacksize}SqStack//进栈void Push(SqStack *S,int e){

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*/;
运行正确.如果看的是严蔚敏老师的书的话,你看的不仔细.
前面说的错了,可能把你的问题和别人的问题混为一谈了,实在抱歉.

热点排行