Listes chainées.

Fermé
Utilisateur anonyme - 2 nov. 2003 à 19:34
 Utilisateur anonyme - 6 nov. 2003 à 11:44
Bonjour,

J'aurais voulus savoir si quelqu'un saurait comment on fait pour trier une liste chainé en langage C.

Merci.

L'administrateur.

5 réponses

nzudie tamwo serge
2 nov. 2003 à 20:29
Pour realiser ce tri, il serait necessaire de realiser d'abord une fonction qui te permettra d'effectuer une comparaison entre deux noeuds c'est a dire a chaque fois tu compareras le champs x du noeud1 et le champs x du noeud2.
Cette fonction etant faite, tu pourras elaborer une autre fonction qui parcourera toute ta liste en effectuant par exemple un tri bulle mais ceci grace a ta premiere fonction que tu auras implementé precedamment pour effectuer les differentes permutations.
0
Utilisateur anonyme
3 nov. 2003 à 12:58
Je suis tout à fait d'acord avec toi mais mon probléme c'est que quand on fait un trie par bulle il faut également changer les @ noeuds, en fait j'arrive à changer les valeurs entre elles mais quand je veut faire pointer sur une @ il y a un probléme.

L'administrateur.
0
nzudie tamwo serge
5 nov. 2003 à 10:36
O.K.
Il ne faut pas changer les champs entre eux mais plutot les noeuds. Bon pour permuter deux noeuds a et b il faut :
N.B : ca c'est dans le cas d'une liste doublement chainee.
- faire une fonction qui insere un noeud devant un autre
- faire une fonction qui supprime un noeud.
Ces fonctions etant implementees, tu n'auras plus qu'a :
- prendre le noeud a et l'insere devant b et et le supprimer apres.
J'espere que maintenant ton probleme est resolu.
bye.
0
Marden Messages postés 1072 Date d'inscription dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208
5 nov. 2003 à 16:33
Une solution possible consiste effectivement à charger le nouvel élément au bon endroit dans la liste (en programmant quelques primitives, facilement réutilisables pour de futures applications : insererPremier, -Dernier, -Precedent, -Suivant, ...).
Si le classement s'effectue au moment où l'on construit la liste, on peut vérifier si le "nouvel élément" est présent ou non, et prendre alors les mesures qu'il convient.
Si la liste existe déjà, et pour effectuer un tri simplement, on peut passer par une table (à créer temporairement, juste pour le tri), contenant simplement les adresses des structures.
La méthode de tri dépend du nombre d'élements à trier (le tri "bulle" - en N au carré - n'est pas performant si la liste est longue). Dans tous les cas, il faudra effectivement une fonction de comparaison, adaptée au problème.


Une manière de procéder peut aussi consister à stocker les éléments (sans pointeur lié à la méthode de stockage) indépendamment du chaînage. Les blocs de chaînage ne contiennent alors que des pointeurs, en général : "suivant", selon besoin : "précédent" ET un pointeur vers la structure d'un élément.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
6 nov. 2003 à 11:44
Merci à tous pour votre aide. Mais mon probléme est désormais régler.

L'administrateur.
0