Probleme avec une pile en c ??? - C++ - Programmation
Marsh Posté le 03-01-2003 à 17:48:50
arras a écrit : |
tu modifies une variable, mais localement au bloc de la fonction, ta pile n'est pas modifiée du tout.
Marsh Posté le 03-01-2003 à 17:52:23
void depiler(PILE *pile){
*pile = (*pile)->suivant;
}
je viens d'essayer cela et ça semble marcher
vous pensez que c vraiment utile de rajouter un niveau d'interaction ? vu que c juste pour supprimer la dessus de la pile
Marsh Posté le 03-01-2003 à 17:58:41
suivant ton programme il faut
Code :
|
mais attention
tu devrais plutot préfere un autre type d'implémentation
ou une pile n'est pas un simple pointeur de cellule, mais un type à part entiere, genre
Code :
|
tout ça à compléter
Marsh Posté le 03-01-2003 à 17:14:06
Voila j'ai un gros problemes avec une pile en c, qui ne depile pas ...
mon source :
typedef int Element;
typedef struct Cellule {
Element valeur;
Element pere;
struct Cellule * suivant;
} Cellule, *PILE;
void empiler(PILE *pile, Element valeur, Element pere ){
PILE Q;
Q = (PILE)malloc(sizeof(Cellule));
Q->suivant = *pile;
Q->valeur = valeur;
Q->pere = pere;
*pile = Q;
}
void depiler(PILE *pile){
pile = (*pile)->suivant;
}
void testepile (PILE *pile) {
printf ("Teste pile\n" );
empiler (pile, 3, 4);
printf ("Sommet pile : %d, %d\n", (*pile)->valeur, (*pile)->pere);
empiler (pile, 4, 5);
printf ("Sommet pile : %d, %d\n", (*pile)->valeur, (*pile)->pere);
depiler (pile);
printf ("Sommet pile : %d, %d\n", (*pile)->valeur, (*pile)->pere);
}
int main (int argc, char *argv[]) {
PILE p; // pile
testepile(&p);
}
Tout se compile mais ça me donne comme affichage :
-->
Teste pile
Sommet pile : 3, 4
Sommet pile : 4, 5
Sommet pile : 4, 5
alors que je devrais avoir
Teste pile
Sommet pile : 3, 4
Sommet pile : 4, 5
Sommet pile : 3, 4
Merci de m'aider un petit peu ...