Académique Documents
Professionnel Documents
Culture Documents
2
Plan
1- Introduction
2- Définition et Déclaration des Liste simplement chaînées
3- Opérations basiques sur les Liste simplement chaînées
4- Opérations d’insertion/suppression sur les Liste simplement chaînées
5- Conclusion
2
Introduction
4
Introduction
Supposons que vous êtes 9 étudiants et vous allez partir déjeuner. Deux d’entre
vous ont une voiture.
Pareil si vous souhaitez utiliser un tableau et vous avez suffisamment d'espace mais
qui n'est pas forcément contiguë!
⇨ Il faut décaler toutes les pièces ajoutées, puis retirer la première, puis
reconstruire la tour !!!
Pareil si vous souhaitez supprimer une case à la fin d’un tableau, alors l’opération n’est pas coûteuse.
Par contre, insérer un élément au début nécessite un décalage du contenu de toutes les cases.
Comme la notion d’élément suivant dans un tableau est une notion implicite, on a besoin de:
⇨ Expliciter la notion du suivant: utiliser l’adresse mémoire afin de désigner de façon unique
un élément.
● Une liste chaînée est une application typique de l’allocation dynamique de mémoire.
● Connaissances Requises:
▪ Les types de données, Les Structures de donnée, Les Enregistrements
▪ Les Pointeurs, L’Allocation Dynamique
▪ Les Fonctions et les Procédures
2
Définition et Déclaration d’une Liste
Simplement Chaînées (LSC)
10
Définition
Les listes chaînées sont des structures de données semblables aux tableaux sauf que l'accès à un
élément ne se fait pas par index mais à l'aide d'un pointeur.
L'allocation de la mémoire est faite au moment de l'exécution.
▪ En ce qui concerne l'emplacement, en revanche, par rapport aux tableaux (où les éléments sont
contigus dans la mémoire), les éléments d'une liste sont éparpillés dans la mémoire. En réalité, dans
la mémoire, la représentation est aléatoire en fonction de l'espace alloué.
▪ En ce qui concerne l'enchaînement, les éléments sont contigus dans une liste. La liaison entre les
éléments se fait grâce à un pointeur.
Description
▪ Une liste simplement chaînée est une suite d'un nombre variable d'objets de même
type et chaque élément, sauf le dernier, pointe vers son successeur.
▪ Une liste simplement chaînée est une structure de donnée constituée d’éléments
contenant chacun:
- une donnée
- une référence (adresse ou pointeur) de l’élément suivant
Élément :
Données Pointeur sur l’élément suivant
Description
● La liste est elle-même totalement déterminée par la référence (adresse) de son premier élément
⇒ premier élément = tête de liste
● Une liste chaînée est une succession d’éléments, dont le dernier élément doit pointer vers NULL
(la fin de la liste) ⇒ le dernier élément n’a pas de successeur (son successeur est la constante
NULL).
L
● Pour accéder à un élément, la liste est parcourue en commençant avec la tête, le pointeur suivant
permettant le déplacement vers le prochain élément.
● Le déplacement se fait dans une seule direction, du premier vers le dernier élément.
Déclaration
Chaque élément d’une liste simplement chaînée (LS) est un enregistrement composé de deux parties:
a. Données (un ou plusieurs champs)
b. Pointeur sur le même enregistrement (il s’agit d’une déclaration récursive)
Syntaxe
Type
<nom_element> = Enregistrement
champ_1: type_1
champ_2: type_2
…
<suivant_pointeur> : pointeur sur <nom_element> // ou *<nom_element>
FinEnregistrement
<nom_type> = pointeur sur <nom_element> // ou *<nom_element>
Déclaration
Exemple
Type
Element= Enregistrement
val: entier
suivant : pointeur sur Element // ou *Element
FinEnregistrement
LSC = pointeur sur Element // ou *Element
Var L: LSC
@20FA
L
12 @1020
30 42 @66CC
99
@75AB NULL
Premier Élément Dernier Élément
(tête de la liste) (pointe vers NULL)
Opérations sur les listes LSC
17
Création de LSC vide
(initialisation)
Fin
Application 1
Soit la liste simplement chaînée L qui pointe vers une collection d’éléments. Chaque
élément contient comme donnée une valeur entière et pointe vers son suivant.
P←L
val : entier
Tant que (P != NULL) Faire
suivant: LSC
t←t+1
finEnregistrement
P ← *P.suivant
CALCUL_TAILLE ← t
Fin
Opérations d’Insertion
sur les LSC
23
Ajout en tête d’une LSC
L
12 30 42 99
P
10
12 30 42 99
P
2
10
12 30 42 99
P
2
10
12 30 42 99
10 1
P
1 Allocation du nouvel élément pointée par P, affectation de la nouvelle valeur et mise à jour du
champ suivant qui pointe vers NULL
Pred
Ajout en queue d’une LSC
Pred
L 2
12 30 42 99
10 1
P
1 Allocation du nouvel élément pointée par P, affectation de la nouvelle valeur et mise à jour du
champ suivant qui pointe vers NULL
12 30 42 99
3
10 1
P
1 Allocation du nouvel élément pointée par P, affectation de la nouvelle valeur et mise à jour du
champ suivant qui pointe vers NULL
3 Chaînage du dernier élément pointé par (Pred) avec le nouvel élément (P)
32
Suppression en tête dans une LSC
L
12 30 42 99
P
1
12 30 42 99
P
1
12 30 42 99
3
P
1
12 30 42 99
1
P
Pred
12 30 42 99
1 P
Pred
3
1
2
Pred
ATTENTION: Discuter le(s) cas particuliers (cas d’une liste avec un seul élément )!!
Suppression en queue dans une LSC
Fonction SUPP_QUEUE(L : LSC) : LSC
Var P, Pred: LSC Libérer(P) 3
Début Finsi
Si (L <> NULL) Alors //liste non vide SUPP_QUEUE ← L
P←L Fin
Pred ← NULL
Tant que (*P.suivant <> NULL) Faire 1
Pred← P
P ← *P.suivant
Fin tant que
Si (Pred = NULL) alors //liste contenant 1 seul élément
Remarque
P←L
Vérifier toujours les cas particuliers : dans ce
L ← NULL
Sinon cas si la liste L initialement vide, si la liste
*Pred.suivant ← NULL 2 contient un seul élément , Sinon risque de bug
Fin si (plantage) lors de l’exécution.
Conclusion
41
Avantages et Inconvénients
Avantages Problèmes
● Les structures qui composent une liste ● Identification par sa tête (Si perte de
simplement chaînée peuvent ne pas pointeur de début ⇒ Perte de toute la
être placées dans l’ordre en mémoire liste).
et encore moins de façon contiguë.
Travail à rendre 1