|
以下程序看似没什么错误,但是不能运行,你能找出其中的错误吗?
以下用 vc 6.0运行
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include <iostream.h>
#include <stdlib.h>
typedef struct{
int number;
char name[20];
}Node;
typedef struct{
Node *base;
Node *top;
int stacksize;
}SqStack;
void Initstack(SqStack &s){
s.base=(Node*)malloc(STACK_INIT_SIZE*sizeof(Node));
if(!s.base){cout<<\"data error!\";exit(0);}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
cout<<\"init success!\"<<endl;
return;
}
void GetTop(SqStack s,Node &e){
if(s.top==s.base){cout<<\"stack is empty!datd error!\";exit(0);}
e=*(s.top--);
return;
}
void Push(SqStack &s,Node e){
if(s.top-s.base+1>=s.stacksize){
s.base=(Node*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(Node));
if(!s.base){cout<<\"realloc error!\";exit(0);}
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top=e;
s.top++;
return;
}
void Pop(SqStack &s,Node &e){
if(s.top==s.base){cout<<\"stack is empty!error!\";exit(0);}
e=*(--s.top);
return;
}
void DestroyStack(SqStack &s){
free(s.base);
s.base=NULL;
s.top=NULL;
s.stacksize=0;
cout<<\"destroy success!\"<<endl;
return;
}
void ClearStack(SqStack &s){
s.top=s.base;
cout<<\"clear success!\"<<endl;
return;
}
bool StackEmpty(SqStack s){
if(s.top==s.base)return true;
else return false;
}
void print(SqStack s){
Node *p;
for(p=s.base;p<s.top;p++){
cout<<p.number<<\'\\t\'<<p.name<<endl;
}
cout<<\"total:\"<<s.top-s.base;
return;
}
int StackLength(SqStack s){
return s.top-s.base;
}
void main(){
SqStack s;
Node e;
Initstack(s);
cout<<\"input number:\"<<endl;
cin>>e.number;
while(e.number!=0){
cout<<\"input name:\"<<endl;
cin>>e.name;
Push(s,e);
cout<<\"input number!\"<<endl;
cin>>e.number;
}
print(s);
Pop(s,e);
cout<<e.number<<\'\\t\'<<e.name<<endl;
print(s);
GetTop(s,e);
cout<<e.number<<\'\\t\'<<e.name<<endl;
ClearStack(s);
DestroyStack(s);
return; |
|