| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1920 人关注过本帖
标题:栈的出栈:我的程序一运行就显示该程序已停止运行
只看楼主 加入收藏
二中小强人
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-11-6
收藏
 问题点数:0 回复次数:0 
栈的出栈:我的程序一运行就显示该程序已停止运行
#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;
}
2015-11-06 19:24
快速回复:栈的出栈:我的程序一运行就显示该程序已停止运行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011945 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved