开发者

implement stack in c++ [closed]

开发者 https://www.devze.com 2023-01-07 12:59 出处:网络
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time,or an extraordinarily narrow situation that is not generally applic
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 12 years ago.

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 ==========


You've got a stray close bracket on line 31;

    cout<<"stack is emphty");

Fix that and see how many of the other "errors" disappear.

Don't worry about not spotting it straight away. It's happened to me many times. You're convinced that something serious is wrong with your code so you fail to spot the trivial typos and spelling mistakes.


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

void push(int i){
     if (top<max-1){
         arr[++top]=i;
     }
     else{
         cout<<"stack full"<<endl;
     }
}

it'll be cleaner. Also, const is type safe, whereas #define is not, so const int max=10 is preferrable to #define max 10.

Since the stack is a stack of integers, NULL in your assignment arr[top]=NULL will be cast into an int and the assignment will be interpreted as arr[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 top as 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.


You have an unbalanced parenthesis on line 31, as reported by your compiler.

cout<<"stack is emphty");

Please read those compiler errors carefully. They usually pin-point the problem right away.

0

精彩评论

暂无评论...
验证码 换一张
取 消