Fonction de la Pile
ahlam1
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
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
A voir également:
- Fonction de la Pile
- Pile carte mere - Guide
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Durée de fonctionnement processeur ✓ - Forum Windows 10
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.
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.
si vous avez une idée comment écrire la fonction depiler() <<en utilisant les liste chainée cad ce n'est pas static cad ne pas utiliser un tableau>> je serai très très reconnaissante
car je ne sais pas comment conserver l'avant dernier élément pour mettre son suivant a NULL