Bonjour,
Pour un exercice je dois trier des mots selon leur nombre d’occurrences de manière décroissante dans un texte. Les mots ayant un même nombre d’occurrences doivent être triés dans l’ordre lexicographique. Je dois donc effectué deux tris. Pour cela j'ai implémenté une fonction de tri fusion qui fonctionne très bien.
J'arrive bien à trier ma liste chaînée selon le nombre d’occurrences mais j'ai plus de problèmes pour trier les mots ayant le même nombre d'occurrences par ordre lexicographique.
Mon problème est que l'adresse du premier élément de lst2 n'a pas changé elle reste la même qu'avant le tri. Du coup dans lst au lieu d'avoir la liste triée normale j'ai uniquement la liste triée à partir de l'ancien premier élément.
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 void TriLexico(ListeMot *lst){ ListeMot index = *lst, tmp = NULL, lst2 = index; int nb; while(index != NULL) nb = index->nombre; while(index->suivant != NULL && index->suivant->nombre == nb) index = index->suivant; tmp = index->suivant; TriFusion(&lst2); index->suivant = tmp; index = index->suivant; lst2 = index; } }
Je ne sais pas si j'ai été très compréhensible et je vous met un petit exemple pour essayé d'être plus claire.
Ma liste de base contient
je : 8
bonjour : 4
de : 2
a : 2
ce : 2
est : 2
etre : 2
peut : 2
après avoir trier les mots ayant pour occurrences 2
j'obtiens dans lst2 :
a : 2
ce : 2
de : 2
est : 2
etre : 2
peut : 2
et dans lst :
je : 8
bonjour : 4
de : 2
est : 2
etre : 2
peut : 2
j'ai donc perdu les mots qui précèdent de.
Avez-vous une idée pour résoudre ce problème ?
Merci d'avance
Partager