[C] liste chainée, passage des pointeurs

Résolu/Fermé
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 - 20 mai 2009 à 17:02
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 - 24 mai 2009 à 23:00
Bonjour,
J'ai un probleme avec ma liste chainée formatée. Dans mon programme il y a 2 fonctions : une qui cherche l'emplacement croissant pour placer ma valeur et l'autre qui créé l'allocation et affecte les valeurs au pointeur.

les voici :
void search(struct elem *tete, int val, struct elem *r, struct elem *q){
     int trouve = 0;
     q=tete;
     r=tete;
     while(q!=NULL && !trouve){
                   printf("tete = %ld\tq = %ld\tr = %ld\n", tete, q, r);
                   if(q->info > val)
                              trouve=1;
                   else{
                        r=q;
                        q=q->next;
                   }
                   printf("q = %ld\tr = %ld\n", q, r);
                   system("pause");
     }
}

void insert(struct elem *tete, int val){
     struct elem *p=NULL,*q=NULL,*r=NULL;
     search(tete, val, r, q);
     p = (struct elem *)malloc(sizeof(struct elem));
     if(p==NULL) printf("Memory allocation failed\n");
     printf("q = %ld\tr = %ld\n", q, r);
     p->info = val;
     p->next = q;
     printf("p->info = %ld\tp->next = %ld\n", p->info, p->next);
     r->next = p;
}


Les pointeurs "q" et "r" sont initialiser a NULL et apres le passage de la fonction "search()" il devraient prendre les valeurs de l'élément suivant et précédant le nouvelle élément. Mais dans mon cas il reste a NULL.

Je ne trouve pas la solution.
Merci de votre aide.

3 réponses

kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 5
23 mai 2009 à 10:33
Je re up le post, j'ai vraiment besoin d'une réponce.

Merci.
0
Lamp's Messages postés 54 Date d'inscription mercredi 13 mai 2009 Statut Membre Dernière intervention 24 septembre 2009 6
23 mai 2009 à 11:21
Il faut que ta fonction search renvoie la cellule sur laquelle tu veux te placer. Une fois dessus, tu créés ta nouvelle cellule et tu fais pointer la cellule sur laquelle tu te trouves sur la cellule que tu viens de créer. Ensuite, tu te déplace d'une cellule pour faire pointer la suite vers le reste de la liste chainée.
0
kaham Messages postés 177 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 1 mars 2013 5
24 mai 2009 à 23:00
Voila j'ai trouvé, mon prototype de fonction était incorrect :
void search(struct elem *tete, int val, struct elem *r, struct elem *q)

et voici celui qui le remplace :
void search(struct elem *tete, int val, struct elem **r, struct elem **q)
0