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

  FORUM HardWare.fr
  Programmation
  C

  Problème listes chainées (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème listes chainées (débutant)

n°1842765
alpachinoi​s
Posté le 25-01-2009 à 16:24:30  profilanswer
 

Bonjour,
 
je suis débutant et je fais un petit programme de listes chainées. J'ai un soucis ans la création de la liste. Lorsque j'insère un donnée, il semble qu'il n'y a pas d'erreur mais lorsque je mets ma fonction afficherListe dans le main, ça ne m'affiche pas ma liste alors que si je la mets dans ma fonction insérer, ben là pas de problème j'obtiens ce que je veux.
 
fichier liste.c

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "liste.h"
  4. int inserer(Liste l, int x){
  5. // création nouveau noeud
  6.    Noeud newNoeud = malloc(sizeof(Noeud));
  7.    if (newNoeud == NULL){
  8.       printf("L'allocation a échoué" );
  9.       exit(1);
  10.    }
  11.    else printf("Allocation OK\n" );
  12. // Assignation de valeur
  13.    newNoeud->n=x;
  14.    newNoeud->suivant=NULL;
  15. // Si c'est la première valeur de la liste
  16.    if(l == NULL)
  17.     {
  18.         l=newNoeud;
  19.     }
  20.     else
  21.     {
  22.         Noeud temp=l;
  23. // Positionnement au dernier noeud
  24.         while(temp->suivant != NULL)
  25.         {
  26.             temp = temp->suivant;
  27.         }
  28. // Ajout du nouveau noeud
  29.         temp->suivant = newNoeud;
  30.         l = temp;
  31.     }
  32.     //afficherListe(l);
  33.    return 0;
  34. }
  35. void afficherListe(Liste liste)
  36. {
  37.     Noeud tmp = liste;
  38.     /* Tant que l'on n'est pas au bout de la liste */
  39.     while(tmp != NULL)
  40.     {
  41.         /* On affiche */
  42.         printf("%d ", tmp->n);
  43.         /* On avance d'une case */
  44.         tmp = tmp->suivant;
  45.     }
  46. }


 
fichier main.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "liste.h"
  4. int main(int argc, char **argv)
  5. {
  6.     Liste ma_liste = NULL;
  7.     int i;
  8.     for(i=1;i<=10;i++)
  9.     {
  10.         ma_liste = inserer(ma_liste, i);
  11.     }
  12.     afficherListe(ma_liste);
  13.     //supprimerListe(ma_liste);
  14.     system("PAUSE" );
  15.     return 0;
  16. }


 
 
Merci d'avance.
 
Edit : désolé j'ai oublié le prototype avec la déclaration de ma struct
 

Code :
  1. typedef struct noeud*Noeud;
  2. typedef struct noeud
  3. {
  4.     int n;
  5.     Noeud suivant;
  6. }*Liste;
  7.    
  8. int inserer(Liste l, int x);
  9. void afficherListe(Liste liste);


Message édité par alpachinois le 25-01-2009 à 16:27:38
mood
Publicité
Posté le 25-01-2009 à 16:24:30  profilanswer
 

n°1842772
Anonymouse
Posté le 25-01-2009 à 17:04:29  profilanswer
 

Tu passe en paramètre un Liste. Il faut lui passer un Liste* si tu veux que l'ajout fonctionne.
 
Au départ tu as un pointeur sur NULL;
Tu passe une copie de se pointeur a ta fonction ajout.
Tu le fais pointer sur un Noeud mais le pointeur initial est toujours à NULL tu ne modifie que sur quoi le pointeur copié pointe .
 
Si tu passes par un Noeud** tu modifiera bien ce sur quoi le pointeur de début de liste pointe
 
Personnellement je ne suis pas fana des typedef masquant des pointeurs comme avec ta Liste.  :)


Message édité par Anonymouse le 25-01-2009 à 17:15:53
n°1842775
alpachinoi​s
Posté le 25-01-2009 à 17:18:07  profilanswer
 

désolé je vois pas où ça change Liste étant juste un alias.
 
Et aussi j'ai pas le droit de changer la déclaration de la structure cardans ma consigne  :sweat: .

Message cité 1 fois
Message édité par alpachinois le 25-01-2009 à 17:19:56
n°1842804
Anonymouse
Posté le 25-01-2009 à 18:24:46  profilanswer
 

alpachinois a écrit :

désolé je vois pas où ça change Liste étant juste un alias.
 
Et aussi j'ai pas le droit de changer la déclaration de la structure cardans ma consigne  :sweat: .


 
T'as zapé la première partie de mon message? Passe un Liste*


Message édité par Anonymouse le 25-01-2009 à 18:25:19

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

  Problème listes chainées (débutant)

 

Sujets relatifs
problème php mysqlPython pour débutant
Problème de MouseListener sur GraphicalViewer (GEF)probleme jinternalframe
Problème d'URL rewritingProbleme connection BDD
Problème de tag :o[RESOLU] [VBS] Probleme script vbs
Problème de compatibilité javascript/IEDébutant en JAVA
Plus de sujets relatifs à : Problème listes chainées (débutant)


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