新手请教c数据结构问题,为什么取栈元素全都相同
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define maxsize 100
typedef int selemtype;
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
status initstack(sqstack &s){
s.base=new int[maxsize];
if(!s.base) return(OVERFLOW);
s.top=s.base;
s.stacksize=0;
return OK;
}
bool emptystack(sqstack s){
if(s.top==s.base)
return 1;
else
return 0;
}
int lengthstack(sqstack s){
return (s.top-s.base);
}
status push(sqstack &s,int e){
if(s.stacksize==maxsize)return ERROR;
*(s.top++)=e;
return OK;
}
status pop(sqstack &s,int &e){
if(s.top==s.base)return ERROR;
return OK;
}
int main(){
sqstack s;
initstack(s);
int a[10],e,q;
cout<<"请输入10个数:"<<endl;
for(int i=0;i<10;i++){
cin>>a[i];
e=a[i];
push(s,e);
}
q=lengthstack(s);
cout<<"顺序栈的长度为:"<<q<<endl;
cout<<"输出的数为:"<<endl;
for(i=0;i<10;i++){
pop(s,e);
cout<<e<<'\0';
}
cout<<endl;
return 0;
}
[解决办法]
tatus pop(sqstack &s,int &e){
if(s.top==s.base)return ERROR;
return OK;
}
pop只判断了一下,没弹出值
[解决办法]
status pop(sqstack &s,int &e)
{
if(s.top==s.base)return ERROR;
return OK;
}
[解决办法]
status pop(sqstack &s,int &e)
{
if(s.top==s.base)return ERROR;
e = *s.top++;
return OK;
}
[解决办法]
// 如下做了修改
status pop(sqstack &s,int &k)
{
if(s.top==s.base)
return ERROR;
else
k = *(--s.top); // k 在这得有个反应,有个赋值,没反应的话,它的值始终都不变了
return OK;
}
int main()
{
sqstack s;
initstack(s);
int a[10],e,q;
cout<<"请输入10个数:"<<endl;
for(int i=0;i<10;i++)
{
cin>>a[i];
e=a[i];
push(s,e);
}
q=lengthstack(s);
cout<<"顺序栈的长度为:"<<q<<endl;
cout<<"输出的数为:"<<endl;
int k = 0;
for(int i=0;i<10;i++)
{
if( pop(s,k) )
{
cout<<k<<'\0';
}
}
cout<<endl;
system("pause");
return 0;
}
[解决办法]
// 不好意思,有个遗漏
// 多加上的第44行“system("pause");”,如果不注释,则需要加上头文件包含:#include <process.h>