栈的出栈:我的程序一运行就显示该程序已停止运行
#include<stdio.h>#include<stdlib.h>
#define STACK_SIZE 10
#define INCREASESIZE 1
typedef struct {
int stacksize;
int* base;
int* top;
}sqstack,*STACK;
void initstack(STACK S){
S->base=(int*)malloc(STACK_SIZE*sizeof(int));
S->top=S->base;
S->stacksize=STACK_SIZE;
}
请大神帮忙看看问题出自哪?
void push(STACK S,int newdata){//压栈
if(S->top-S->base>STACK_SIZE){
S->base=(int*)realloc(S->base,(S->stacksize+INCREASESIZE)*sizeof(int));
S->top=S->base+S->stacksize;//base重新分配地址了,top就也要重新给一次。但是他仍然是加 stacksize,
++S->stacksize;
}
*S->top++=newdata;
}
void pop(STACK S){//推栈
int *e;
if(S->top>S->base)
*e=*(--S->top);
}
void stacktraverse(STACK S,void (*visit)()){//一个遍历函数的通用模版
while(S->top>S->base){
visit();
S->base++;
}
}
void printe(STACK S)
{
printf("%d ",*S->base);
}
main()
{
int num,i,newdata;
sqstack mystack;//其实所有的表在声明时都是结构体
initstack(&mystack);
printf("请输入要创建的栈长度\n");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("请输入第%d个数 ",i);
scanf("%d",&newdata);
push(&mystack,newdata);
}
//printstack(&mystack);
stacktraverse(&mystack,printe);
pop(&mystack);
stacktraverse(&mystack,printe);
system("pause");
return 0;
}