Chapitre 3
Les listes
chaînées
2 11/04/2021
Plan
Introduction
Définition et types
Listes simplement chaînées
Représentation
Primitives
Listes doublement chaînées
Représentation
Primitives
Ikram Chebbi-AP2
3 11/04/2021
Introduction
Les structures de données permettent de relier
entre elles des données.
Deux catégories:
Linéaires: tableaux, listes chaînées (cas particuliers: pile et file).
Non linéaires: arbres, graphes, enregistrements.
Sont classées en:
Structures dynamiques: réserver des emplacements mémoire
dynamiques à l’exécution (Exemples: listes chaînées, arbres, graphes).
Structures statiques: réserver des emplacements mémoire statiquement
à la compilation (Exemples: tableaux et enregistrement).
Ikram Chebbi-AP2
4 11/04/2021
Introduction
Structures statiques VS Structures dynamiques
Structure statique:
Nécessité de définir sa taille maximale dés la déclaration.
Lourdeur de la gestion optimale de la mémoire.
Nécessité de faire de test de débordement à chaque étape de
traitement.
Structure dynamique:
Allocation de mémoire au besoin d’une façon dynamique (pas de
taille maximale).
Gestion des espaces occupés par les données est plus simple.
Simulation des phénomènes de monde réel: file d’attente d’un
guichet, gestion d’une pile de dossier, liste d’appel, etc.
Ikram Chebbi-AP2
5 11/04/2021
Définition
Une liste chaînée: une séquence ordonnée
d’éléments de même type.
Exemples:
Liste d’entiers (12, 43, 27)
Chaîne de caractères ‘’Hello’’ est la liste
(‘H’,’e’,’l’,’l’,’o’).
Les jours d’une semaine
Remarque:
L’ordre des éléments compte: (12, 43, 27)≠ (12, 27, 43)
La multiplicité des éléments compte: (12, 43, 27) ≠ (12, 43, 27, 27)
Ikram Chebbi-AP2
6 11/04/2021
Types
Liste simplement chaînée: représentation où
chaque élément pointe vers l’élément suivant.
Liste
12 43 27
Liste doublement chaînée: représentation où chaque
élément pointe à la fois vers l’élément suivant et
l’élément précédent.
Tête Queue
12 43 27
Ikram Chebbi-AP2
7 11/04/2021
Types
Liste circulaire: liste chaînée dont son dernier
élément ne pointe pas vers NIL mais pointe vers le
premier élément.
Simplement chaînée:
Liste
12 43 27
Doublement chaînée:
Liste
12 43 27
Ikram Chebbi-AP2
8 11/04/2021
Types
Pile: permet de stocker des données à l’ordre LIFO (Last In
First Out = Dernier Entré Premier Sorti).
L’insertion des données se fait au début de la liste (en haut de la
pile).
Le premier élément de la liste est le dernier élément inséré, sa
position est donc en haut de la pile.
Dernier entré Premier sorti
Pile
12
43
27 Bas de la pile
Ikram Chebbi-AP2
9 11/04/2021
Types
File: permet de stocker les données dans l’ordre
FIFO (First In First Out = Premier Entré Premier Sorti)
L’insertion des données se fait en haut de la file.
La sortie se fait par le bas de la file.
File
Fin 27 Haut de la file
Début
43
12 Bas de la file
Premier entré Premier sorti
Ikram Chebbi-AP2
10 11/04/2021
But
On va s’intéresser dans ce cours aux chaînes simplement
et doublement chaînées.
Représentation
Primitives
Ikram Chebbi-AP2
11 11/04/2021
Listes Simplement
Chaînées
Ikram Chebbi-AP2
12 11/04/2021
Représentation
Chaque élément d’une liste a un rang (son ordre dans
la liste).
A chaque élément est associé un pointeur qui contient
l’adresse de l’élément suivant dans la liste.
Chaque élément (cellule) est composé d’:
Une information : peut être un seul champ ou plusieurs
champs (enregistrement).
Information Pointeur
→ Contenu de la cellule.
Un pointeur : pointe vers l’élément suivant .
Ikram Chebbi-AP2
13 11/04/2021
Représentation
Exemple 1 Exemple 2
Liste d’entiers Liste des points
Types Types
cellule: structure point: structure
abscisse: réel
info: entier
ordonnée: réel
suivant: ↑cellule
FinStructure
FinStructure
cellule: structure
Liste: ↑cellule
pt: point
suivant:↑cellule
FinStructure
Liste: ↑cellule
Ikram Chebbi-AP2
14 11/04/2021
Représentation
Une liste est représentée par un pointeur de tête de
type ↑ cellule qui est un pointeur sur la première
cellule de la liste.
Liste : ↑ cellule
Tous les éléments de la liste sont accessibles depuis
la tête de la liste.
La liste des éléments qui suivent la tête est appelée
queue.
Ikram Chebbi-AP2
15 11/04/2021
Représentation
Si la tête est NIL, la liste est vide.
Le dernier élément ne pointe sur rien: son
pointeur est NIL.
Tête: 12
Pointeur vers tête: liste Queue: (43, 27)
Longueur: 3
La position de 27 est 3
12 43 27 NIL
Tête Queue
Ikram Chebbi-AP2
16 11/04/2021
Primitives
Structures de données:
Définition d’un nouveau type.
Définition des algorithmes de manipulation (primitives).
Type: exemple d’une liste d’entiers
Types
cellule: structure
info: entier
suivant: ↑ cellule
FinStructure
Liste: ↑ cellule
Primitives: ensemble d’opérations de base qu’on peut les
effectuer sur une liste.
Ikram Chebbi-AP2
17 11/04/2021
Primitives
Pour manipuler une liste, on a besoin:
Créer une liste vide.
Tester si une liste est vide.
Calculer la longueur d’une liste.
Accéder à la tête et à la queue d’une liste.
Si on est dans une position, accéder à la position suivante.
Insérer un élément dans une position: tête, queue, avant et après
un élément référencé.
Supprimer un élément: tête, queue, élément référencé.
Détruire une liste.
Ikram Chebbi-AP2
18 11/04/2021
Primitives
Liste: tête
Création d’une liste vide
Initialiser la tête de la liste par NIL.
NIL
Vérification qu’une liste est vide
Vérifier que la tête est un pointeur NIL.
Calcul de longueur d’une liste
Faire le parcours de la liste jusqu’à atteindre sa fin et
incrémenter simultanément un compteur de longueur.
Ikram Chebbi-AP2
19 11/04/2021
Primitives
Accès à la tête
Renvoyer la valeur de la tête.
On suppose que la liste est non vide.
Accès à la queue
Renvoyer la liste qui a la tête celle qui suit la tête de la
liste initiale.
On suppose que la liste est non vide.
Ikram Chebbi-AP2
20 11/04/2021
Primitives
Insertion en tête
La liste est dans l’ordre inverse de celui des insertions.
La tête d’une liste est modifiée à chaque insertion.
Exemple: pour la liste (12, 43, 27)
On insère 27 puis 43 par la suite 12.
Nouvelle tête
Tête initiale
12
43 27 NIL
Ikram Chebbi-AP2
21 11/04/2021
Primitives
Insertion en queue
La liste est dans le même ordre de celui des insertions.
La tête de la liste n’est modifiée que lors de la
première insertion.
Deux cas à considérer:
Liste vide: on fait pointer la tête de la liste sur la nouvelle cellule.
Liste non vide: on fait pointer le champ suivant de la dernière
cellule sur la nouvelle cellule.
Tête
Nouvelle
Cellule de fin
12 43 NIL
Ikram Chebbi-AP2
27 NIL
22 11/04/2021
Primitives
Insertion après un élément
Insère un élément dans la liste, à l’aide d’un pointeur vers la
cellule précédente.
On suppose qu’on n’insère pas dans la première position (liste
non vide).
Si la nouvelle cellule doit être insérée après le dernier élément,
cette cellule va pointer sur NIL (insertion en queue).
Exemple: insérer la valeur 9 après le 2ème élément.
Tête
Elément précédent
12 43 27 NIL
Nouvelle
Cellule
9 Ikram Chebbi-AP2
23 11/04/2021
Primitives
Insertion avant un élément
On peut chercher l’élément qui précède cet élément
successeur et par la suite on fait une insertion après son
prédécesseur.
On suppose que la liste non vide.
Si la liste contient un seul élément, la nouvelle cellule sera
insérée en tête.
Exemple: insérer la valeur 9 avant le 2ème élément.
Tête
Elément successeur
Elément précédent
de successeur 12 43 27 NIL
Nouvelle
Cellule 9 Ikram Chebbi-AP2
24 11/04/2021
Primitives
Suppression tête
La tête de la liste devient celle qui suit la tête actuelle.
On suppose que la liste non vide.
Si la liste à un seul élément, dans ce cas elle devient vide.
Tête Nouvelle tête
12 43 27 NIL
Ikram Chebbi-AP2
25 11/04/2021
Primitives
Suppression queue
Faire le parcours de la liste jusqu’à atteindre l’avant
dernier élément.
On veut supprimer le dernier élément, alors l’avant dernier
va pointer sur NIL.
On suppose que la liste non vide.
Si la liste à un seul élément, dans ce cas elle devient vide.
Tête
12 43 NIL 27 NIL
Ikram Chebbi-AP2
26 11/04/2021
Primitives
Suppression d’un élément référencé:
Elément d’indice (i): supprimer une cellule (i) de la liste à
l’aide d’un pointeur vers la cellule précédente (i-1).
Traiter les cas:
i ≤ 0 et i > la longueur de la liste.
Si i = 1: suppression de la tête.
Si i = longueur de la liste: suppression de la queue.
Exemple: supprimer le 2ème élément.
Tête: cellule précédente
12 43 27 NIL
Ikram Chebbi-AP2
27 11/04/2021
Primitives
La première occurrence d’une valeur V: supprimer le
premier élément qui est égal à V dans la liste s’il existe.
Calculer automatiquement son prédécesseur.
Gérer les cas limites:
Liste vide.
V en tête ou en fin de liste.
V non présent dans la liste.
La tête de liste peut changer.
Toutes les occurrences d’une valeur V.
Ikram Chebbi-AP2
28 11/04/2021
Primitives
Destruction d’une liste
Libérer tous les espaces mémoire réservés pour
toutes les cellules de la liste.
On suppose que la liste est non vide.
Faire le parcours de la liste pour libérer toutes les
cellules.
Ikram Chebbi-AP2
29 11/04/2021
Listes Doublement
Chaînées
Ikram Chebbi-AP2
30 11/04/2021
Représentation
Chaque élément (cellule) est composé d’:
Une information : peut être un seul champ ou plusieurs
champs (enregistrement).
→ Contenu de la cellule.
Un premier pointeur : pointe vers l’élément suivant.
Un deuxième pointeur: pointe vers l’élément précédent.
Information
2ème Pointeur 1er Pointeur
Ikram Chebbi-AP2
31 11/04/2021
Représentation
Exemple: liste d’entiers
Types
celluleDouble: structure
info: entier
suivant: ^celluleDouble
précédent: ^celluleDouble
FinStructure
ListeDouble: structure
tête: ^celluleDouble
queue: ^celluleDouble
FinStructure
Ikram Chebbi-AP2
32 11/04/2021
Représentation
Une liste est représentée par deux pointeurs tête et
queue de type ^celluleDouble qui sont respectivement
les pointeurs sur la première cellule et la dernière cellule
de la liste.
ListeDouble: structure
tête: ^celluleDouble
queue: ^celluleDouble
FinStructure
Tous les éléments de la liste sont accessibles soit depuis la
tête soit depuis la queue de la liste. Ikram Chebbi-AP2
33 11/04/2021
Représentation
Si la tête et la queue sont NIL, la liste est vide.
Le premier élément n’a pas de précédent (son
pointeur précédent est NIL).
Le dernier élément n’a pas de suivant (son pointeur
suivant est NIL). Tête: 12
Queue: 27
Le suivant de 43 est 27
Le précédent de 12 est NIL
Tête Queue
12 43 27
Ikram Chebbi-AP2
34 11/04/2021
Primitives
Liste: tête=queue
Création d’une liste vide
Initialiser la tête et la queue de la liste par NIL.
NIL
Vérification qu’une liste est vide
Vérifier que la tête et la queue sont deux pointeurs NIL.
Calcul de longueur d’une liste
Faire le parcours de la liste jusqu’à atteindre sa fin et
incrémenter simultanément un compteur de longueur.
Ikram Chebbi-AP2
35 11/04/2021
Primitives
Accès à la tête
Renvoyer la valeur de la tête.
On suppose que la liste est non vide.
Accès à la queue
Renvoyer la valeur de la queue (dernier élément).
On suppose que la liste est non vide.
Ikram Chebbi-AP2
36 11/04/2021
Primitives
Insertion en tête
La liste est dans l’ordre inverse de celui des insertions.
La tête d’une liste est modifiée à chaque insertion.
Exemple: pour la liste (12, 43, 27)
On insère 27 puis 43 par la suite 12.
Deux cas à considérer:
Liste vide: on fait pointer la tête et la queue de la liste sur la nouvelle
cellule.
Liste non vide: on fait pointer le champ suivant de la nouvelle cellule
sur la tête de la liste et le précédent de de la tête sur la nouvelle
cellule.
Nouvelle tête Tête initiale
12
43 27 Ikram Chebbi-AP2
37 11/04/2021
Primitives
Insertion en queue
La liste est dans le même ordre de celui des insertions.
La tête de la liste n’est modifiée que lors de la première
insertion.
La queue d’une liste est modifiée à chaque insertion.
Deux cas à considérer:
Liste vide: on fait pointer la tête et la queue de la liste sur la nouvelle
cellule.
Liste non vide: on fait pointer le champ suivant de la dernière cellule sur
la nouvelle cellule et le précédent de la nouvelle sur la dernière cellule.
Tête Nouvelle Queue
Queue
12 43
Amel Tilouche-ASD2 27
38 11/04/2021
Primitives
Insertion après un élément
On suppose qu’on n’insère pas dans la première position (liste
non vide).
Si la nouvelle cellule doit être insérée après le dernier
élément, cette cellule va pointer sur NIL (insertion en queue).
Exemple: insérer la valeur 9 après le 2ème élément.
Tête Queue
12 43 27
Nouvelle
Cellule 9
Ikram Chebbi-AP2
39 11/04/2021
Primitives
Suppression tête
La tête de la liste devient celle qui suit la tête actuelle.
On suppose que la liste non vide.
Si la liste à un seul élément, dans ce cas elle devient vide.
Nouvelle tête
Tête Queue
12 43 27
NIL
Ikram Chebbi-AP2
40 11/04/2021
Primitives
Suppression queue
On veut supprimer le dernier élément, alors la queue de
la liste devient le précédent de la queue initiale.
On suppose que la liste non vide.
Si la liste à un seul élément, dans ce cas elle devient
vide. Nouvelle queue
Tête Queue
12 43 27
NIL
Ikram Chebbi-AP2
41 11/04/2021
Primitives
Suppression d’un élément référencé d’indice (i):
Supprimer une cellule (i) de la liste à l’aide d’un pointeur
vers la cellule précédente (i-1).
Traiter les cas:
i ≤ 0 et i > la longueur de la liste.
Si i = 1: suppression de la tête.
Si i = longueur de la liste: suppression de la queue.
Exemple: supprimer le 2ème élément.
Tête: cellule précédente
Queue
12 43 27
Ikram Chebbi-AP2
42 11/04/2021
Primitives
Destruction d’une liste
Libérer tous les espaces mémoire réservés pour
toutes les cellules de la liste.
On suppose que la liste est non vide.
Faire le parcours de la liste pour libérer toutes les
cellules.
Ikram Chebbi-AP2
43 11/04/2021
Autres opérations
On peut également effectuer d’autres opérations sur
les listes simplement et doublement chaînées telles
que:
Afficher une liste
Rechercher un élément
Supprimer les éléments identiques
Trier une liste
Concaténer deux listes
Etc. Ikram Chebbi-AP2