Bonjour
Je souhaite programmer moi même une fonction pop et push.
Dans un premier temps je fais autant de push que de pop pour eviter toute erreur de chaine vide.
Cependant le code ci dessous me renvoi toujours le premier élément ajouté.
Je ne comprends malheureusement pas mon erreur.
Ma classe
Mes fonctions pop et push
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #ifndef PILE_H #define PILE_H class Pile { public: Pile(); virtual ~Pile(); int valeur; //Valeur de l'element courant Pile *prec; //Pointeur sur l'element précedent int Pop(Pile *p); void Push(Pile *p, int Val); protected: private: }; #endif // PILE_H
Mon main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 int Pile::Pop(Pile *p) { int Val; Pile *tmp=NULL; tmp = p->prec; Val = p->valeur; /* Le pointeur pointe sur l'element precedent */ p = tmp; return Val; /* Retourne la valeur soutirée de la pile. */ } void Pile::Push(Pile *p, int Val) { Pile *newelement=NULL; newelement = new Pile; newelement->valeur = Val; newelement->prec = p; p = newelement; }
Après exécution j'obtiens 5555
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include "Pile.h" #include <iostream> using namespace std; int main() { Pile a; a.prec=NULL; a.valeur=5; a.Push(&a,6); a.Push(&a,7); a.Push(&a,8); cout << a.Pop(&a) << a.Pop(&a) << a.Pop(&a) << a.Pop(&a) <<endl; return 0; }
Si quelqu'un pouvait m'aider à déterminer ce que je fais de travers je lui en serai extrêmement reconnaissant.
Partager