Problème lecture liste chainée
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
Code:
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 |
Mes fonctions pop et push
Code:
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;
} |
Mon main
Code:
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;
} |
Après exécution j'obtiens 5555
Si quelqu'un pouvait m'aider à déterminer ce que je fais de travers je lui en serai extrêmement reconnaissant.