Fonction de la Pile
ahlam1
Messages postés
33
Statut
Membre
-
ahlam -
ahlam -
Bonjour,
j crée une class Pile en c++ qui contien les fonction de la pile mais
j un problm dans la fonction depiler() :ce n'est pas un problem de compilation mais il ne donne rien dans l'execution
voici ma fonction depiler:
void Pile::depiler(){
Chainon* der;
Chainon* chn;
chn=ptete;// ptete un pointeur dand la class Pile
while(chn->getsuiv()){ // arrêter lorsqu'il arrive au dernier chainon pour le supprimer
der=chn;
chn=chn->getsuiv();
}
der->setsuiv(chn->getsuiv());
};
si vous avez une solution je serai reconnaissante
merciiiiiiiii d'avance
j crée une class Pile en c++ qui contien les fonction de la pile mais
j un problm dans la fonction depiler() :ce n'est pas un problem de compilation mais il ne donne rien dans l'execution
voici ma fonction depiler:
void Pile::depiler(){
Chainon* der;
Chainon* chn;
chn=ptete;// ptete un pointeur dand la class Pile
while(chn->getsuiv()){ // arrêter lorsqu'il arrive au dernier chainon pour le supprimer
der=chn;
chn=chn->getsuiv();
}
der->setsuiv(chn->getsuiv());
};
si vous avez une solution je serai reconnaissante
merciiiiiiiii d'avance
Configuration: Windows XP Safari 532.0
2 réponses
-
le principe d'une pile, c'est comme une pile d'assietes. Qu'est ce qu'on enlève ? celle du dessus. (où est-ce qu'on rajoute une nouvelle assiette? au dessus). Qu'est ce qu'on voit quand on regarde la pile ? Celle du dessus.
Le pointeur de la pile pointe sur celle qu'il faut enlever lorsqu'on dépile. C'est tout l'intérêt de la pile que de pouvoir accéder rapidement et directement à l'endroit où on ajoute et où on enlève des choses.
Il faut que vos revoyiez votre conception de ce petit algorithme.
Cela dit, pour parler de votre code directement, il y a un "problème" de logique ici :
der->setsuiv(chn->getsuiv());
lorsqu'on arrive là, chn->getsuiv() vaut forcément NULL (à cause du while) .
Cette ligne veut simplement dire : der->setsuiv(NULL).
Et c'est inutile car en sortant de la boucle, der pointe effectivement sur le dernier élément, et donc son pointeur suivant est déjà NULL. -
mais
a la fin de la boucle while <der> va pointer sur l'avant dernier element et chn va pointer sur le dernier element qui va etre suprimer apres
donc der->getsuiv() va pointer sur le dernier element