Insertion dans une liste chainée triée
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:
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:
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:
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,