Académique Documents
Professionnel Documents
Culture Documents
1- Introduction :
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 :
• 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.
1
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
Où typeqq est un type simple (entier, réel, caractère, ...) ou composé (tableau, chaîne de caractère,
structure, …..).
On définit un ensemble d'opérations que l'on va utiliser pour écrire des algorithmes sur les
listes. Cet ensemble d'opérations s'appelle le Modèle des Listes Linéaires Chaînées (MLLC) :
2
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
Voici l’équivalence en langage C, des fonctions et des procédures du modèle :
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 :
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.
3
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
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
Sinon
L ← suivant (L) ;
FTQ
Retourner (nil) ;
Fin
Sinon, accéder d’abord au maillon de position « k -1 », ensuite refaire le chaînage comme suit;
Procédure InsererLLC_pos (Var L: ptrM, k: entier positif, v:entier, Var possible: booléen)
Debut
possible← faux ;
Si (k>0) alors
Si (k=1) alors
InsererLLC_Deb(L, v)
possible ←vrai
Sinon
Q ← RechPosLLC(L, k-1) ;
Si ((Q ≠ nil) et (suivant (Q) ≠ nil)) // la position k existe
P = allouer (); aff_val(P, v) ;
aff_suiv (P, suivant (Q)) ;
6
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
a. Insertion à la fin
7
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
Cas 2: Insertion au début
8
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
6- SUPPRESSION un élément dans LLc:
Pour supprimer un maillon contenant la valeur v, il faut d’abord rechercher ce maillon. Une fois
trouvé (soit P ce maillon), on va refaire le chaînage (son précédent avec son suivant), ensuite,
libérer le maillon P.
Si Q = nil alors
L ← suivant (P); Libérer (P); P←L;
Sinon
aff_suiv(Q,suivant (P)); libérer (P); P←suivant (Q);
Fin
10
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
8- LISTES PARTICULIÈRES
8.1- LISTE CIRCULAIRE : Liste circulaire est une LLC où le dernier maillon pointe le
premier, formant ainsi un cercle.
Le même modèle des LLC est utilisé pour écrire des algorithmes sur ce type de listes:
MLLCcir = MLLC
Construire une LLC unidirectionnel a la fin, chaîner le dernier maillon avec le premier
12
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
2 éme Méthode
Procédure CreerLLCcir (Var L:ptrM, N:entier)
Début
Pour i←1 à N faire
lire (x); P = allouer (); aff_val(P, x) ;
Si (L=nil) alors //la liste est vide
L ←P ; // mettre à jour l’entête
Sinon
aff_suiv(Q, P) ;
aff_suiv(P, L) ;// lier le dernier maillon au premier
Q←P ;//sauvegarder l’@ du dernier maillon
Fp
Fin
13
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
8.4- Suppression du maillon contenant la valeur v
Rechercher le maillon contenant la valeur v S’il existe un tel maillon, on distingue deux cas :
1. La valeur se trouve dans le maillon « L »,
a. Si la liste contient qu’un seul maillon, alors la liste devient vide
b. Sinon, mettre à jour le pointeur L et refaire le chaînage.
2. La valeur se trouve dans un autre maillon (≠ L), refaire le chaînage
Libérer (P);
L ←nil;
Fsi
Fin
9-1. Définition :
• Liste bidirectionnelle ou Liste Doublement Chaînées est une liste que l'on peut parcourir
dans les deux sens : de gauche à droite (pour aller au maillon suivant) et de droite à gauche
(pour aller au maillon précédent).
• Elle est définit par sa tête, aussi que par sa queue.
Le modèle des LLC bidirectionnelles est donc étendu par les opérations suivantes :
15
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
16
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
Retourner (nil) ;
Fin
Algoritgme 2 : Recherche d’une valeur dans une LLC Bidirectionnelle
17
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
L.Queue ←P;
Sinon
aff_prec (P, nil);
aff_suiv (P, L.Tete) ;
aff_prec (L.Tete, P);
L.Tete←P //mettre à jour la tête
Fin
9-6. Insertion à la fin de la liste.
18
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
19
Algorithmique et structure de données 3 Univ Batna-2- Chapitre3 : Les Listes linéaires chainées
9-9. Destruction d’une LLC Bidirectionnelle
Définition : Liste bidirectionnelle circulaire est une LLC à double sens et dont le dernier maillon
pointe sur le premier maillon et le premier maillon pointe sur le dernier maillon.
- Le même modèle des LLCs bidirectionnel est utilisé pour écrire des algorithmes sur ce type
de liste : MLLCbdcir = MLLCbd.
Conclusion :
• L’inconvénient des listes chainées réside dans l’accès séquentiel à leurs éléments.
• En effet, pour accéder à un élément, il faut passer par tous les éléments qui le précèdent =>
augmentation du temps de calcul.
Afin de pallier ce problème, une autre structure de donnée peut être utilisée, il s’agit de la structure
ARBRE.
20