新手,请问数据结构的有关问题。为什么会出现不清楚的定义
新手,请教数据结构的问题。为什么会出现不清楚的定义。
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
status initstack(sqstack &s){
s.base=new int[MAXSIZE];
if(!s.base) exit(OVERFLOW);
stacksize=MAXSIZE;
return OK;
}
bool emptystack(sqstack s){
if(s.top==s.base)
return 1;
else
return 0;
}
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;
e=*(--s.top);
return OK;
}
void ttot(){
sqstack s;
initstack(s);
int n;
cout<<"请输入一个数:"<<endl;
cin>>n;
while(n){
push(s,n%2);
n=n/2;
}
while(!emptystack(s)){
pop(s,e);
cout<<e<<'\0';
}
}
int main(){
ttot();
return 0;
}
------解决方案--------------------
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
status initstack(sqstack &s){
s.base=new int[MAXSIZE];
if(!s.base) exit(OVERFLOW);
stacksize=MAXSIZE;
return OK;
}
bool emptystack(sqstack s){
if(s.top==s.base)
return 1;
else
return 0;
}
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;
e=*(--s.top);
return OK;
}
void ttot(){
sqstack s;
initstack(s);
int n;
cout<<"请输入一个数:"<<endl;
cin>>n;
while(n){
push(s,n%2);
n=n/2;
}
while(!emptystack(s)){
pop(s,e);
cout<<e<<'\0';
}
}
int main(){
ttot();
return 0;
}
------解决方案--------------------
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int status;
typedef struct{
int *base;
int *top;
int stacksize;
}sqstack;
status initstack(sqstack &s){
s.base=new int[MAXSIZE];
if(!s.base) exit(OVERFLOW);
s.top = s.base;//这里要对s.top初始化
//stacksize=MAXSIZE;//这里错了
s.stacksize = 0;
return OK;
}
bool emptystack(sqstack s){
if(s.top==s.base) return 1;
else return 0;
}
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;
e=*(--s.top);
return OK;
}
void ttot(){
sqstack s;
initstack(s);
int n;
cout<<"请输入一个数:"<<endl;
cin>>n;
while(n){
push(s,n%2);
n=n/2;
}
int e;//e没定义。。
while(!emptystack(s)){
pop(s,e);
cout<<e<<'\0';
}
}
int main(){
ttot();
return 0;
}