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 :

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 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
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;
    }
}
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
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;
}
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).

Merci de votre aide,

Cdtl,