Listes Chaînées : Cours d'Algorithmique et Structure de Données

Telechargé par DAR HIDJRA
Algorithmique et structure de données 3 Chapitre3 : Les Listes linéaires chainées
1
1- Introduction :
Une structure séquentielle est un ensemble de variables de même nature organisées
séquentiellement auxquelles on peut accéder :
• Soit directement par leur numéro d’ordre.
2.1. Définitions : Une Liste Linéaire Chaînées (LLC) est un ensemble de maillons reliés entre eux.
Un maillon est une entité renfermant de l’information et ayant un pointeur sur le maillon qui la
suit. C’est toujours une structure (enregistrement) avec deux champs :
• un champ val : contenant la valeur ou l'information
• un champ suiv : donnant l'adresse du prochain maillon.
Une LLC est caractérisée par :
• L'adresse de son premier élément (la tête de liste). Elle doit toujours être sauvegardée dans
une variable pour pouvoir manipuler la liste.
• NIL constitue l'adresse qui ne pointe aucun maillon (indiquant par convention la fin de la
liste).
• Si la liste est vide (ne contient aucun maillon), la tête doit alors être positionnée à NIL.
Soit en les parcourant une par une dans l’ordre .
2 -
Listes Linéaires Ch aînées (L LC )
Algorithmique et structure de données 3 Chapitre3 : Les Listes linéaires chainées
2
structure, …..).
On définit un ensemble d'opérations que l'on va utiliser pour écrire des algorithmes sur les
Où typeqq est un type simple (entier, réel, caractère, ...) ou composé (tableau, chaîne de caractère,
listes. Cet ensemble d'opérations s'appelle le Modèle des Listes Linéaires Chaînées (MLLC) :
Algorithmique et structure de données 3 Chapitre3 : Les Listes linéaires chainées
3
2-2. ALGORITHMES SUR LES LLCS
a/ Parcours :
Accès par valeur : il s'agit de rechercher (séquentiellement à partir de la tête) une valeur v dans la
liste.
Accès par position : il s'agit de rechercher (séquentiellement à partir de la tête) le maillon (son
adresse) qui se trouve à une position donnée. La position est le numéro d'ordre du maillon dans la
liste (entier).
b/ Mises à jour :
• Construction d'une liste à partir de n valeurs données.
• Insertion d'une valeur (v) à une position donnée (i) : allouer un nouveau maillon contenant v
et l'insérer dans la liste de telle sorte qu'il se retrouve à la i ème position.
• Insertion d'une valeur (v) dans une liste ordonnée : allouer un nouveau maillon contenant v
et l'insérer dans la liste de telle sorte que la liste reste ordonnée après l'insertion.
• Suppression du maillon se trouvant à une position donnée : rechercher par position le
maillon et le libérer.
• Suppression d'une valeur v dans la liste : rechercher par valeur et supprimer le maillon
trouvé en mettant à jour le précédent (s'il existe). Si la liste contient plusieurs occurrences
de la même valeur, on pourra les supprimer en faisant un seul parcours de la liste.
• Destruction de tous les maillons d'une liste.
c/ Tri sur les LLC :
Les mêmes algorithmes de tri utilisable pour les tableaux, en prenant en compte que l'accès par
position coûte beaucoup plus cher que dans un tableau.
d/ Fusion (ou Interclassement) de deux listes ordonnées : à partir de 2 listes ordonnées,
construire une liste ordonnée contenant tous leurs éléments (sans allouer de nouveaux maillons).
Voici l’équivalence en langage C, des fonctions et des procédures du modèle :
Algorithmique et structure de données 3 Chapitre3 : Les Listes linéaires chainées
4
c/ Eclatement d'une liste en 2 listes distinctes : à partir d'une liste L et d'un critère (un prédicat)
donné, on construit deux listes, l'une contenant toutes les valeurs de L vérifiant le critère, l'autre,
celles qui ne le vérifient pas
3- Les opérations sur les LLCs :
3-1.Impression : Soient la liste suivante:
Procédure ImprimerLLC (L: ptrM)
Début
Tant que (L≠nil) faire // la liste n’est pas vide
DTQ
écrire (valeur (L)) ;
L ←suivant (L) ;
FTQ
Fin
La liste imprimée est 2, 10, 5, -1 et 6
3-2. Longueur d’une LLC : Soient la liste suivante:
Fonction LongLLC (L: ptrM): entier
Début
Cpt 0;
Tant que (L≠nil) faire // la liste n’est pas vide
DTQ
Cpt ++ ;
L ←suivant (L) ;
FTQ
Retourner (Cpt) ;
Fin
La longueur de cette liste = 5
3-3. Recherche d’un élément dans LLc :
Fonction RechLLC (L: ptrM, v:entier): ptrM
Début
Tant que (L≠nil) faire // la liste n’est pas vide
Si (valeur (L) = v) alors
retourner (L) ;
Algorithmique et structure de données 3 - - Chapitre3 : Les Listes linéaires chainées
5
Sinon
L ← suivant (L) ;
FTQ
Retourner (nil) ;
Fin
Si v= 1 alors la fonction retourne nil.
- Rechercher le maillon qui se trouve à la position k = 4.
Fonction RechPosLLC (L: ptrM, K: entier positif): ptrM
Debut
Si K > 0 alors
i ←1
Tant que (iK) et (L≠nil) faire //accéder au K ème maillon
DTQ
i++; L ←suivant (L);
FTQ
Retourner (L);
Sinon
Retourner (nil) ;
Fin
- Si k= 6, le maillon n’existe même pas (retourner nil)
3-4. Insertion d’un élément dans LLC
Pour ajouter un élément dans la liste, il y a plusieurs situations :
1. Insertion au début de la liste
2. Insertion à la fin de la liste
3. Insertion à une position donnée
Cas 1: Insertion au début
Procédure InsererLLC_Deb(Var L: ptrM, v:entier)
Début
P = allouer () ;
aff_val(P, v) ;
aff_suiv(P, L) ;
L←P ; //mettre à jour la tête de la liste
Fin
1 / 17 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!