顺序栈的一个小系统 入栈那里出了问题
编译没有错误,但是运行时 按了入栈我设置了按0结束入栈但是在取栈顶元素的时候 栈顶元素为0,为什么会这样要怎么改才行??#include<iostream>
using namespace std;
#include<stdlib.h>
#include<string>
#define OK 1
#define ERROR 0
#define MAXSIZE 100
#define OVERFLOW-2
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)//3.1构造一个空栈
{
S.base=new SElemType;
if(!S.base)
exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
//3.2顺序栈的入栈
Status Push(SqStack &S, SElemType e)
{
if(S.top-S.base==S.stacksize)
return ERROR;
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)//3.3顺序栈的出栈
{
if(S.top==S.base)
return ERROR;
e=*--S.top;
return OK;
}
SElemType GetTop(SqStack S)//3.4取栈顶元素
{
if(S.top!=S.base)
return *(S.top-1);
}
int main()
{
SqStack s;
SElemType e,del;
int choose=-1;
int k;
cout<<"建表"<<endl;
cout<<"入栈"<<endl;
cout<<"取栈顶元素"<<endl;
cout<<"出栈"<<endl;
while(choose!=0)
{
cin>>choose;
switch(choose)
{
case 1:
{
if(InitStack(s))
{cout<<"建表成功"<<endl;}
else
{cout<<"建表失败"<<endl;}
break;
}
case 2:
cout<<"请输入你想入栈的元素,按0结束。。"<<endl;
while(e)
{
cin>>e;
Push(s,e);
}
break;
case 3:
if (GetTop(s))
cout<<GetTop(s)<<endl;
else
cout<<"没有元素啦"<<endl;
break;
case 4:
cout<<"栈顶元素出栈。。。"<<endl;
Pop(s,e);
cout<<"出栈的元素为:"<<e<<endl;
break;
}
}
} 求大神帮忙,小弟真的看不出来了。。。。。。。。。。。 考虑你输入了一个0之后会发生什么,
cout<<"请输入你想入栈的元素,按0结束。。"<<endl;
while(e){
cin>>e; // 假定这儿读入了一个 0
Push(s,e); // 那么这儿就紧接着将其压入栈中,当下一次来到while(e)这一行时,才退出
}
所以会栈中会多出一个0。
更加恰当的做法是读入后立即判断,大概写成这样子:
while(true){
cin>>e;
if(e == 0) break;
else Push(s,e);
}
当然这样写起来就不好看啦,所以简洁些的写法就像这样:
while(cin >> e, e) Push(s,e);
谢谢你,楼主不胜感激 gem456 发表于 2016-5-3 14:07
谢谢你,楼主不胜感激
嗯,相互帮助咯~ {:10_279:} 感谢分享
页:
[1]