2010-07-17 7 views
1

Comment puis-je coder une pile en C++? J'ai essayé moi-même comme suit:pile d'outil en 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; 
} 

Mais je reçois les erreurs suivantes:

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

Est-ce que c'est pour une tâche scolaire? Une bonne idée pourrait être de rendre l'indentation du code meilleure pour faciliter la lecture. –

+0

ne pas oublier de commenter et vous pouvez aussi utiliser C++ const, peut-être que vous pouvez plus tard en tant que programme supplémentaire en tant que modèle et lancer des exceptions si la pile est pleine. – Quonux

Répondre

1

Le code sera moins sujette aux erreurs et plus clair à lire si vous ne changez que d'état (variables, membres, etc.) lorsque vous en avez besoin. Donc, si vous réécrire la fonction de poussée dans

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

ce sera plus propre. En outre, const est de type safe, alors que #define ne l'est pas, donc const int max=10 est préférable à #define max 10.

Puisque la pile est une pile d'entiers, NULL dans votre affectation arr[top]=NULL sera convertie en int et l'affectation sera interprétée comme arr[top]=0. Vous pouvez supprimer complètement l'assignation, puisque l'élément est à l'extérieur de la pile une fois qu'il a sauté, et donc peu importe que ce soit zéro ou non.

Par ailleurs, j'utiliserais top comme pointeur vers l'élément de pile disponible suivant plutôt qu'un pointeur vers le dernier élément utilisé, afin d'éviter d'avoir une valeur réservée de 'non pointer' de -1.

5

Vous avez un support près parasite sur la ligne 31;

cout<<"stack is emphty"); 

Corrigez cela et voyez combien d'autres "erreurs" disparaissent.

Ne vous inquiétez pas de ne pas le repérer immédiatement. Cela m'est arrivé plusieurs fois. Vous êtes convaincu que quelque chose de grave ne va pas avec votre code, donc vous ne parvenez pas à repérer les fautes d'orthographe triviales et les fautes d'orthographe.

+0

oui je l'ai réparé merci tout le monde –

1

Vous avez une parenthèse déséquilibrée sur la ligne 31, comme indiqué par votre compilateur.

cout<<"stack is emphty"); 

Veuillez lire attentivement les erreurs du compilateur. Ils précisent habituellement le problème tout de suite.