Bonjour,

je suis en train de faire un petit programme avec des listes chainée, c'est une liste de mots, par ordre alphabétique. Je voudrais que dés lors de l'insertion cela soit trié directement.

Mon problème est que mon code ne fait pas ce que je desire, j'ai eu beau retourner le problème dans tout les sens je ne vois pas ce qui cloche dans mon code.
Si quelqu'un pouvait me donner son avis svp.

ci joint la fonction ajouter element

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
void ajouter(list *liste, char new_mot[100])
{
    int test=test_liste_null(liste);
    int i;
    Elem *new = (Element*)malloc(sizeof(struct Element));
    Element *act;
    int result=0;
 
 
    for(i_compt=0;i_compt<100;i_compt++)
    {
        new->chaine_caractere[i] = new_mot[i];//parcours le tableau (chaine de caractere) et copie caractere par caractere dans le tabeau du nouvel element
    }
 
    //si c'est le premiere élément
    if(test==0)
    {
        new->suivant = NULL;
        liste->premier=new;
 
    }
    else
    {
		//fonction qui renvoit un entier positif si l'element lue est avant (ordre alphabétique) le nouvel element 
		//sinon elle renvoit un entier negatif
        result=comparer_chaine(liste->premier->chaine_caractere,new->chaine_caractere);
		//comparaison avec le premier element de la pile
        if(result<0)
        {
            new->suivant=liste->premier;
            liste->premier=new;
        }
        else
        {
            act = liste->premier;
            while (act!= NULL && result>0)
            {
                result=comparer_chaine(act->chaine_caractere,new->chaine_caractere);
                act=act->suivant;
            }
            new->suivant=act->suivant;
            act->suivant=new;
        }
    }
}
cordialement