Fonction de la Pile

Fermé
ahlam1 Messages postés 23 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 1 avril 2011 - 2 janv. 2010 à 21:42
 ahlam - 3 janv. 2010 à 01:11
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

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
2 janv. 2010 à 21:49
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.
4
bonsoir;
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
0
ahlam1 Messages postés 23 Date d'inscription mercredi 19 août 2009 Statut Membre Dernière intervention 1 avril 2011 2
2 janv. 2010 à 22:50
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
1