[C] liste chainée, passage des pointeurs

Résolu
kaham Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   -  
kaham Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

3 réponses

kaham Messages postés 180 Date d'inscription   Statut Membre Dernière intervention   5
 
Je re up le post, j'ai vraiment besoin d'une réponce.

Merci.
0
Lamp's Messages postés 54 Date d'inscription   Statut Membre Dernière intervention   6
 
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 180 Date d'inscription   Statut Membre Dernière intervention   5
 
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