Vous êtes sur la page 1sur 18

Les listes chaînées

Les listes chaînées


 Une liste chaînée permet de stocker un ensemble de
valeur du même type, comme un tableau.
 Contrairement au tableau, la taille de la liste chaînée peut
varier au cours du temps. En effet, contrairement au
tableau, la liste n'est pas allouée en une seule fois, mais
chaque élément est alloué indépendamment, sous la
forme d'un maillon.
 Notion de maillon
 L'élément de base d'une liste chaînée s'appelle le maillon. Il est
constitué : d’un ou des champs de données et d'un pointeur
vers un maillon.
Les listes chaînées
 Notion de liste chaînée
 Dans une liste chaînée, chaque élément pointe, à l'aide d’un
pointeur (suivant) vers l'élément suivant dans la liste ;
 le dernier élément, par définition, n'a pas de suivant, donc son
pointeur suivant vaut NIL.
Les listes chaînées
 Pour manipuler une liste chaînée, nous manipulons un
pointeur sur le premier élément; comme chaque
élément « connaît » l'élément suivant, on peut ainsi
accéder à tous les éléments de la liste.
 Si le pointeur premier vaut NIL, on considérera
naturellement que la liste est vide (elle ne contient aucun
élément).
 Le premier maillon de la liste est appelé tête, le dernier
maillon de la liste est appelé queue.
Les listes chaînées
 Implémentation du type liste chaînée
 Un maillon est composé de deux champs de types hétérogènes,
 il est implémenté donc en utilisant les enregistrements de la manière
suivante :
^maillon

 Déclaration du maillon
type
maillon = Enregistrement
valeur : type
suivant : ^maillon
Fin maillon
Les listes chaînées
 Autre modélisation du type liste chaînée
 Un maillon est composé de deux champs :
 Un champ de type enregistrement contenant les champs de données
 Un pointeur vers le maillon suivant
 Déclaration du maillon
type
data = Enregisterment
val1 : type
val2 : type

Fin data
maillon = Enregistrement
champ: data
suivant : ^maillon
Fin maillon
Les listes chaînées
 Définition du type liste
type
liste : maillon
 Déclaration d’une variable de type liste
 Une fois le type liste est défini on peut déclarer une variable de
type pointeur sur liste de la manière suivante
 p : ^liste
 Accès aux champs d’un maillon d’une liste
 Si p est un pointeur sur une variable de type liste, p^ est la
variable pointée par p. cette variable est un enregistrement, pour
accéder à ses champs on utilise l’opérateur ". "
p^. valeur
p^. suivant
Les listes chaînées
 Initialisation d’une liste à Nil
 Une liste est vide si le pointeur du premier maillon vaut Nil
 p ← Nil
 Insertion d’une valeur en tête d’une liste
 Ecrire la procédure InsertTete qui permet d’insérer une
valeur val en tête d’une liste chaînée donnée par
l’adresse de son premier élément (premier).
Notons qu’après l’insertion la valeur du premier
sera changée, donc le passage doit se faire par
adresse.
Les listes chaînées

 Principe
1. Créer un maillon d’adresse p1 contenant la valeur val
 p1 ← nouveau(^liste)
 p1^.valeur ← val
2. Créer un lien entre le nouveau maillon et la tête de la liste de telle sorte
que p soit le suivant de p1
 p1^.suivant ← premier
3. Le maillon p1 devient le premier maillon de liste p
 premier ← p1
Les listes chaînées
 Algorithmique
PROCEDURE InsertTete(var premier : ^liste, val : entier)
var
type
nouvElt: ^liste maillon = Enregistrement
valeur : entier
Début suivant : ^maillon
nouvElt ← nouveau(^liste) Fin maillon

nouvElt ^.valeur ← val liste : maillon


nouvElt ^.suivant ← premier
premier ← nouvElt
Fin
Complexité : O(1)
Les listes chaînées
 Récupérer l’adresse du dernier élément d’une liste
 Ecrire la fonction Dernier qui renvoie l’adresse du dernier
élément d’une liste donnée par l’adresse de son premier élément
(premier).

 Principe
 Le dernier élément de la liste s’il existe est un maillon qui ne
possède pas de suivant.
 On fait le parcours de liste du premier élément jusqu’à trouver
un maillon dont le suivant vaut Nil.
 L’adresse de ce maillon est renvoyée par la fonction.
Les listes chaînées
 Algorithmique
Fonction Dernier( premier : ^liste) : ^liste
Debut
Si (premier <>Nil ) alors
Tantque(premier ^.suivant<>Nil) faire
premier ← premier ^.suivant
FinTantque
FinSi
Retourner premier
Fin

Complexité : O(N), N : nombre d’élément dans la liste


Les listes chaînées
 Insertion d’une valeur en queue d’une liste
 Ecrire la procédure InsertQueue qui permet d’insérer une valeur
val dans une liste chaînée donnée par l’adresse de son premier
élément (premier).
 Après l’insertion la valeur du premier peut changer (dans le cas
où la liste est vide) donc le passage doit se faire par adresse.
Les listes chaînées
 Principe : Deux cas
Si la liste est vide l’insertion en queue est une insertion en tête.
si(premier =Nil) alors
InsertTete(premier,val)
Sinon
 Créer un maillon d’adresse nouvElt contenant la valeur val et dont l’élément
suivant est Nil
nouvElt ← nouveau(^liste)
nouvElt ^.valeur ← val
nouvElt ^.suivant ← Nil
 Récupérer l’adresse du dernier maillon (Der) et nouvElt devient le suivant de Der
Der ← Dernier(premier)
Der^.suivant ← nouvElt
Finsi
Les listes chaînées
 Algorithmique
PROCEDURE InsertQueue(var premier : ^liste, val : entier)
var
nouvElt, Der: ^liste
Début
si(premier=Nil) alors
InsertTete(premier,val)
Sinon
nouvElt ← nouveau(^liste)
nouvElt ^.valeur ← val
nouvElt ^.suivant ← Nil // il sera le dernier
Der ← Dernier(premier)
Der^.suivant ← nouvElt
Finsi
Fin
Les listes chaînées
 Longueur d’une liste
 Écrire la fonction LongListe qui permet de renvoyer le
nombre d’éléments d’une liste chaînée donnée par l’adresse
de son premier élément (premier).
 La fonction renvoie 0 si la liste est vide.
 Principe
 On fait le parcours de la liste du premier élément jusqu’au
dernier en incrémentant un compteur de 1 à chaque passage d’un
maillon à son suivant.
 La valeur de ce compteur au départ vaut 0
Les listes chaînées
Algorithmique
FONCTION LongListe(premier : ^liste) : entier
var
L : entier
Début
L←0
Tantque(premier <>Nil) faire
L ← L+1;
premier ← premier ^.suivant;
FinTantque
Retourner L;
Fin
Les listes chaînées
 Exercices
 Ecrire une fonction récursive Longueur qui retourne le
nombre d’éléments d’une liste chaînée donnée en
paramètre.
 Ecrire une fonction récursive qui retourne le membre à la
ième position dans une liste chaînée, la liste et la position
sont données en paramètre.

Vous aimerez peut-être aussi