How can I code a stack in C++? I have tried this myself as follows:
#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;
}
But I get the following errors:
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 ==========
The code will be less error prone, and clearer to read, if you only change state (variables, members etc) when you need to. So, if you rewrite the push function into
it’ll be cleaner. Also, const is type safe, whereas #define is not, so
const int max=10is preferrable to#define max 10.Since the stack is a stack of integers, NULL in your assignment
arr[top]=NULLwill be cast into an int and the assignment will be interpreted asarr[top]=0. You could remove the assignment altogether, since the element is outside the stack once popped, and thus it doesn’t matter whether it’s zero or not.BTW, I’d use
topas a pointer to the next available stack item rather than a pointer to the last used one, in order to avoid having a reserved ‘non pointer’ value of -1.