#include<iostream> typedef int ElemType; typedef struct StackNode{ ElemType data; struct StackNode *next; }StackNode,*LinkStack; int InitStack(LinkStack &S) { S=NULL; return 1; } void DestroyStack(LinkStack &S){ LinkStack *p; LinkStack *q; p=GetTop(S); while (!p) { q = p; p = p->next; free(q); } } int ClearStack(LinkStack &S){ while(S.top!=S.base){ S->top=0; S->top--; } if(S.top==S.base) printf("清空成功/n"); else printf("清空失败/n"); } int StackEmpty(LinkStack S){ if(S.base==S.top) return OK; else return ERROR; } void StackLength(S){ int t; t=S->top-S->base; cout>>t; } void GetTop(LinkStack S){ if(S!=NULL) return S->data; } int Push(LinkStack S,int e){ p=new StackNode; p->data=e; p->next=S; S=p; return OK; } int Pop(LinkStack &S,int &e){ if(S==NULL) return ERROR; e=S->data; p=S; S=S->next; delete p; return OK; } int StackTraverse(S){ while(S.top!=-1){ cout<<S->data[S->top]<<" "; S->top--; cout<<endl; } } void conversion(int N,int e){ //对于一个非负八进制数,打印输出其等值的十进制数 InitStack(S);int i=10,t=0,x,n=0; while(N/i!=0){ t++; i*=10; } while(N){ x=N/pow(10,i)%10; i=i/10; Push(S,x); } while(!StackEmpty(S)){ Pop(S,e); x=x+(e*pow(8,n)); n++; } cout<<x; } int main(){ cout<<"入栈元素为"<<Push(S,e)<<endl; cout<<"栈顶元素为:"<<GetTop(S)<<endl; cout<<"栈:"; StackTraverse(S); DestroyStack(S); cout<<endl<<"销毁后:"; if(StackEmpty(S)) cout<<"是空栈"<<endl; cout<<endl<<"请输入想转换成八进制的整数:"; cin>>N;cout<<"转换之后的数是"; conversion(N); }
时间: 2023-06-18 11:02:21 浏览: 57
这是一个基于链表实现的栈的代码,但是其中有一些错误:
1. 在 ClearStack 函数中,S.top 和 S.base 未定义,应该改为 S->top 和 S->base。
2. 在 StackLength 函数中,应该传入 S 而非 &S。
3. 在 GetTop 函数中,应该返回 ElemType 类型的数据而非 void。
4. 在 Push 函数中,应该传入 LinkStack &S 而非 LinkStack S。
5. 在 StackTraverse 函数中,应该传入 LinkStack S 而非 S。
6. 在 main 函数中,应该在 InitStack 之后声明 LinkStack S。
7. 在 main 函数中,Pop 函数中应该用 S 而非 p。
8. 在 main 函数中,conversion 函数中应该传入 LinkStack &S 而非 LinkStack S。
9. 在 conversion 函数中,应该先声明 StackNode *S 而非 LinkStack S。
10. 在 conversion 函数中,pow 函数需要引入 math.h 头文件。
可以参考以下修改后的代码:
```c++
#include<iostream>
#include<math.h>
using namespace std;
typedef int ElemType;
typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
int InitStack(LinkStack &S) {
S=NULL;
return 1;
}
void DestroyStack(LinkStack &S){
LinkStack p;
while (S!=NULL)
{
p = S;
S = S->next;
free(p);
}
}
int ClearStack(LinkStack &S){
while(S->top!=S->base){
S->top=0;
S->top--;
}
if(S->top==S->base) printf("清空成功/n");
else printf("清空失败/n");
}
int StackEmpty(LinkStack S){
if(S==NULL) return 1;
else return 0;
}
void StackLength(LinkStack S){
int t;
t=S->top-S->base;
cout<<t;
}
ElemType GetTop(LinkStack S){
if(S!=NULL)
return S->data;
}
int Push(LinkStack &S,int e){
StackNode *p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
return 1;
}
int Pop(LinkStack &S,int &e){
StackNode *p;
if(S==NULL) return 0;
e=S->data;
p=S;
S=S->next;
delete p;
return 1;
}
void StackTraverse(LinkStack S){
while(S!=NULL){
cout<<S->data<<" ";
S=S->next;
}
cout<<endl;
}
void conversion(int N){
//对于一个非负八进制数,打印输出其等值的十进制数
LinkStack S;
InitStack(S);
int i=10,t=0,x,n=0;
while(N/i!=0){
t++;
i*=10;
}
while(N){
x=N/pow(10,i)%10;
i=i/10;
Push(S,x);
}
int result = 0;
while(!StackEmpty(S)){
Pop(S,x);
result += x*pow(8,n);
n++;
}
cout<<result;
DestroyStack(S);
}
int main(){
LinkStack S;
int e,N;
InitStack(S);
cout<<"入栈元素为"<<Push(S,1)<<endl;
cout<<"入栈元素为"<<Push(S,2)<<endl;
cout<<"入栈元素为"<<Push(S,3)<<endl;
cout<<"栈顶元素为:"<<GetTop(S)<<endl;
cout<<"栈:";
StackTraverse(S);
DestroyStack(S);
cout<<endl<<"销毁后:";
if(StackEmpty(S)) cout<<"是空栈"<<endl;
cout<<endl<<"请输入想转换成八进制的整数:";
cin>>N;cout<<"转换之后的数是";
conversion(N);
}
```