Bonjour,
J'ai un petit soucis d'insertion dans une liste chainée (on suppose qu'elle est déjà triée) :
Voici les structures de Element et de liste :
Voici la fonction qui doit insérer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //Element de la liste typedef struct Element Element; struct Element { void * contenu; Element * suivant; }; //La liste typedef struct Liste Liste; struct Liste { Element *premier; Element *dernier; };
Voici le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 int insertionOrdonnee(Liste *liste, int (*fct)(void * param1, void * param2), void * donnee){ Element *elemp = liste->premier; Element *elem = malloc(sizeof(elem)); if(elem == NULL){ return 0; } if (liste ==NULL){ return 0; } if(liste->premier==NULL && liste->dernier ==NULL){ insertion(liste,donnee); return 1; } int ok = fct(elemp->contenu,donnee); while(elemp->suivant != NULL && (ok ==0 || ok < 0)){ if (elemp == liste->premier && ok <0){ printf("Insertion premier\n"); insertion(liste,donnee); return 1; }else if(elemp == liste->dernier && ok <0){ printf("Insertion dernier\n"); insertionqueue(liste,donnee); return 1; }else{ Element *el = elemp->suivant; elemp->suivant = el->suivant; } elemp = elemp->suivant; } }
ComparaisonInt est la fonction appele pour l'insertion, je pense que le problème vient de la, notamment avec la valeur retournée (toujours la même).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 int main(void){ printf("Initialisation de la liste \n"); Liste *liste=initialisation(); int test = 4; int * var1 = &test; int test2 = 3; int * var2 = &test2; int test3 = 2; int *var3 = &test3; printf("Insertion en tête\n"); insertion(liste,var1); afficherListe(liste); printf("\n"); printf("Insertion en tête\n"); insertion(liste,var2); afficherListe(liste); printf("\n"); printf("Insertion en tete\n"); insertion(liste,var3); afficherListe(liste); int comparaisonInt(void *p1, void *p2){ if (p1 == p2){ return 0; }else if (p1 > p2){ return 1; }else{ return -1; } } int i = 2; printf("Insertion ordonnee\n"); insertionOrdonnee(liste,&comparaisonInt,&i); afficherListe(liste); return 0; }
Merci de votre aide,
Cdtl,
Partager