程序出现exe已停止工作,问题无法解决
程序代码:
#include"stdio.h" #include"malloc.h" #include"stdlib.h" #define STACK 10 #define INIT 100 typedef struct { int *base; int *top; int stacksize; }Sqstack; /*********构造栈***********/ void initstack(Sqstack *s) { s->base=(int *)malloc(INIT * sizeof(int)); s->top=s->base; s->stacksize=INIT; } /**********显示栈顶元素**********/ void gettop(Sqstack *s,int e) { if(s->top==s->base) return ; e=*(s->top-1); } /*************插入新的栈顶元素*************/ void push(Sqstack *s,int e) { if(s->top-s->base>=s->stacksize) { //栈满,追加存储空间 s->base=(int *)realloc(s->base,(s->stacksize+STACK) * sizeof(int)); if(!s->base) exit (0); //存储分配失败 s->top=s->base+s->stacksize; s->stacksize+=STACK; } printf("请输入要插入的栈顶元素:"); scanf("%d",&e); *s->top=e; s->top++; } /***********删除栈顶元素************/ void pop(Sqstack *s,int e) { if(s->top==s->base) return ; s->top--; e=*s->top; } void main() { Sqstack *a=0; int n,k,e=0,i; printf("以下进行栈的相关操作\n"); initstack(a); printf("请输入构建栈的数据个数:"); scanf("%d",&n); if(n>=a->stacksize) { //栈满,追加存储空间 a->base=(int *)realloc(a->base,(a->stacksize+STACK) * sizeof(int)); if(!a->base) exit (0); } for(i=0;i<n;i++) { printf("输入元素:"); scanf("%d",a->top); a->top++; //s->top指栈内地址 } //此处需要存储的数据都已经放在了栈S里面 printf("请选择要进行的操作\n"); printf("1.显示栈顶元素\n"); printf("2.插入新的栈顶元素\n"); printf("3.删除栈顶元素\n"); printf("选择的操作为:"); scanf("%d",&k); if(k==1) { gettop(a,e); printf("栈顶元素为%d",e); } if(k==2) { push(a,e); printf("形成的新栈为:"); for(i=0;i<n+1;i++) scanf("%d",a->top); } if(k==3) { pop(a,e); printf("要删除的栈顶元素为%d",e); } }