一个关于堆栈的问题

c765314747 2012-11-12 09:50:00
可以编译 运行时停止工作
求教啊
#include <stdio.h>
#include <stdlib.h>
#define StackSize 10
typedef struct{
int data[StackSize];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
int StackEmpty(SeqStack *S)
{
return S->top==-1;
}
int StackFull(SeqStack *S)
{
return S->top==StackSize-1;
}

void Push(SeqStack *S,int x)
{
if(StackFull(S))
printf("Stack overflow");
S->data[++S->top]=x;//栈顶指针加1后将x入栈
}
char Pop(SeqStack *S)
{
if(StackEmpty(S))
printf("Stack underflow");
return S->data[S->top--];//栈顶元素返回后将栈顶指针减1
}
SeqStack ReverseString(SeqStack *S) //逆转函数
{
int i,A[StackSize];
SeqStack *K;
InitStack(K);
for(i=0;!StackEmpty(S);i++) //{Push(K,Pop(S));}
{A[i]=Pop(S);}
for(i=0;A[i]!='\0';i++){Push(S,A[i]);}
//return *K;
}
void PrintStack(SeqStack *S)
{
int i;
printf("栈中元素为:");
for(i=S->top;i>=0;--i)
printf("%d ",S->data[i]);
printf("\n");
}
int main()
{
SeqStack *Stack;
char ch;
printf("ENTER");
InitStack(Stack);
while((ch=getchar())!='\n'){Push(Stack,ch);}
PrintStack(Stack);
ReverseString(Stack);
PrintStack(Stack);
system("pause");
return 0;
}


...全文
175 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
c765314747 2012-11-12
  • 打赏
  • 举报
回复
引用 2 楼 azzbcc 的回复:
断的原因是你初始化函数没给栈分配内存空间,所以S->top = 1不能执行
我二了以为顺序栈不用分配了
14号选手 2012-11-12
  • 打赏
  • 举报
回复
动态的分配一个空间吧
转角天边 2012-11-12
  • 打赏
  • 举报
回复
肯定是指针非法访问内存了
azzbcc 2012-11-12
  • 打赏
  • 举报
回复
断的原因是你初始化函数没给栈分配内存空间,所以S->top = 1不能执行
海风林影 2012-11-12
  • 打赏
  • 举报
回复
没仔细看你的代码,但这段代码
    char ch;
    printf("ENTER");
    InitStack(Stack);
    while((ch=getchar())!='\n'){Push(Stack,ch);}
我猜你是控制台输入"ENTER" 之后敲了一个回车键, 这会被第4行 ch = getchar() 读入,这样while() 循环结束了.....

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧