我使用教程编写了这段代码。他的输出是正确的,但我得到了stackoverflow和内存地址作为输出,尽管mycode和他的完全相同。我已经声明了数组大小为100,但它仍然不起作用
#include<iostream>
using namespace std;
#define n 100
class stack{
int* arr;
int top;
public:
stack(){
arr=new int[n];
top=-1;
};
void push(int x){
if(top=n-1){
cout<<"Stack overflow"<<endl;
return;
}
top++;
arr[top]=x;
};
void pop(){
if(top==-1){
cout<<"No element to pop"<<endl;
return;
}
top--;
};
int Top(){
if(top==-1){
cout<<"Stack is empty"<<endl;
return -1;
}
return arr[top];
};
bool empty(){
return top==-1;
}
};
int main(){
stack st;
st.push(1);
st.push(2);
st.push(3);
cout<<st.Top()<<endl;
st.pop();
cout<<st.Top()<<endl;
st.pop();
st.pop();
st.pop();
cout<<st.empty()<<endl;
return 0;
}
我已经运行了代码,并清楚地看到,在您的"push"方法"if"条件中,您又错过了一个"=",而且我还稍微修改了您的代码以帮助您。希望你会觉得它有帮助。
我做的小更新:
- "插入的{integer}"-在推送方法中添加的消息
- 显示了弹出1时的顶部元件
#include<iostream>
using namespace std;
#define n 100
class stack{
int* arr;
int top;
public:
stack(){
arr=new int[n];
top=-1;
};
void push(int x){
if(top==n-1){
cout<<"Stack overflow"<<endl;
return;
}
top++;
arr[top]=x;
cout<<"inserted "<<arr[top]<<endl;
};
void pop(){
if(top==-1){
cout<<"No element to pop"<<endl;
return;
}
top--;
};
int Top(){
if(top==-1){
cout<<"Stack is empty"<<endl;
return -1;
}
return arr[top];
};
bool empty(){
return top==-1;
}
};
int main(){
stack st;
st.push(1);
st.push(2);
st.push(3);
cout<<st.Top()<<endl; // 3
st.pop(); // pops 3
cout<<st.Top()<<endl; // 2
st.pop(); // pops 2
cout<<st.Top()<<endl; // 1
st.pop(); // pops 1
st.pop(); // stack underflow
cout<<st.empty()<<endl;
return 0;
}