注册 登录
编程论坛 数据结构与算法

栈的出栈:我的程序一运行就显示该程序已停止运行

二中小强人 发布于 2015-11-06 19:24, 1926 次点击
#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;
}
0 回复
1