Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1403 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme avec une pile en c ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme avec une pile en c ???

n°278857
arras
Posté le 03-01-2003 à 17:14:06  profilanswer
 

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 ...
 

mood
Publicité
Posté le 03-01-2003 à 17:14:06  profilanswer
 

n°278867
lorill
Posté le 03-01-2003 à 17:48:50  profilanswer
 

arras a écrit :


void depiler(PILE *pile){
    pile = (*pile)->suivant;  
}


tu modifies une variable, mais localement au bloc de la fonction, ta pile n'est pas modifiée du tout.
 

n°278868
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 03-01-2003 à 17:50:12  profilanswer
 

effectivement il faut rajouter un niveau d'indirection et ne pas non plus oublier de libérer


---------------
du bon usage de rand [C] / [C++]
n°278870
arras
Posté le 03-01-2003 à 17:52:23  profilanswer
 

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

n°278872
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 03-01-2003 à 17:58:41  profilanswer
 

suivant ton programme il faut
 

Code :
  1. void depiler(PILE **pile)
  2. {
  3.   PILE *tmp=pile;
  4.   *pile = (*pile)->suivant;
  5.    free(tmp); 
  6. }


 
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 :
  1. typedef struct
  2. {
  3.   Cellule *premier;
  4.   // et pourquoi pas d'autres infos, comme la hauteur
  5. } PILE;
  6. void depiler(PILE *pile)
  7. {
  8.   if(pile->premier!=NULL)
  9.   {
  10.     Cellule *tmp=pile->premier;
  11.     pile->premier=pile->premier->suivant;
  12.     free(tmp);
  13.   }
  14. }


 
tout ça à compléter


Message édité par Taz@PPC le 03-01-2003 à 17:59:25

---------------
du bon usage de rand [C] / [C++]
n°278873
arras
Posté le 03-01-2003 à 18:03:20  profilanswer
 

oki je comprends mieux
 
merci de votre aide ;)  :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme avec une pile en c ???

 

Sujets relatifs
[PHP] Problème de "mise à jour" [résolu]kdevelop : problème de breakpoint
Probleme avec mon menu ....Probleme avec des espaces... [ Resolu ]
[PHP] Probleme avec exec() positionné dans une boucle...[resolu][CSS] Contourner le problème "fixed" pour le défilement avec IE
[TCL] Problême d'encodage de chaine...probleme sous flash mx
[C] problème avec la fonction fwrite(...)[sous débutant] problème avec prg (résolut )
Plus de sujets relatifs à : Probleme avec une pile en c ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR