如何在C ++中编写堆栈代码?我自己尝试过如下:
#include <iostream>
using namespace std;
#define max 10
class stack{
private:
int arr[max];
int top;
public:
stack(){
top=-1;//empty initialy stack
}
void push(int i){
top++;
if (top<max){
arr[top]=i;
}
else{
cout<<"stack full"<<endl;
top--;
}
}
int pop(){
if (top==-1){
cout<<"stack is emphty");
return NULL;
}
else{
int data=arr[top];
arr[top]=NULL;
top--;
return data;
}
}
bool empty(){
return (top==-1);
}
};
int main(){
stack a;
a.push(12);
a.push(30);
a.push(23);
a.push(42);
a.push(100);
while (!a.empty()){
a.pop();
}
return 0;
}
但我收到以下错误:
1>------ Build started: Project: stack_implementations, Configuration: Debug Win32 ------
1> stak_implementation.cpp
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(31): error C2059: syntax error : ')'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(34): error C2059: syntax error : 'else'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(34): error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(42): error C2628: 'stack' followed by 'bool' is illegal (did you forget a ';'?)
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(44): error C2065: 'top' : undeclared identifier
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(31): error C2143: syntax error : missing ';' before '}'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2059: syntax error : '}'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2143: syntax error : missing ';' before '}'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(47): error C2059: syntax error : '}'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(56): error C2039: 'empty' : is not a member of 'stack'
1> c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(4) : see declaration of 'stack'
1>c:\users\david\documents\visual studio 2010\projects\stack_implementations\stak_implementation.cpp(56): fatal error C1903: unable to recover from previous error(s); stopping compilation
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
答案 0 :(得分:6)
你在31号线上有一个偏离的近距离支柱;
cout<<"stack is emphty");
解决这个问题,看看有多少其他“错误”消失了。
不要担心不立即发现它。它发生在我身上很多次。您确信您的代码存在严重问题,因此您无法发现琐碎的拼写错误和拼写错误。
答案 1 :(得分:2)
第31行有一个不平衡的括号,正如编译器报告的那样。
cout<<"stack is emphty");
请仔细阅读这些编译器错误。他们通常会立即指出问题所在。
答案 2 :(得分:2)
如果您只在需要时更改状态(变量,成员等),代码将不易出错,并且更易于阅读。所以,如果你将push函数重写为
void push(int i){
if (top<max-1){
arr[++top]=i;
}
else{
cout<<"stack full"<<endl;
}
}
它会变得更干净。此外,const是类型安全的,而#define则不是,因此const int max=10
更适合#define max 10
。
由于堆栈是一个整数堆栈,因此赋值arr[top]=NULL
中的NULL将被转换为int,赋值将被解释为arr[top]=0
。你可以完全删除赋值,因为弹出后元素在栈外,因此无论它是否为零都无关紧要。
BTW,我使用top
作为指向下一个可用堆栈项的指针,而不是指向最后一个堆栈项的指针,以避免保留“非指针”值为-1。 / p>