Vous êtes sur la page 1sur 10

Université de Manouba

Ecole supérieure d’économie numérique ESEN

Algorithmique et structures de
données II
(Cours 4)

La liste simplement chainée

Réalisé par: Dhouha Maatar 1

1. Introduction
1.1. Limite des tableaux:

 Taille connue et fixe des éléments


 Insertion et suppression dynamiques non pratiques
 Allocation d’un seul bloque en mémoire

D’où les listes :


 Taille, inconnue au départ, elle varie au cours du temps
 Insertion et suppression dynamiques pratiques
 Les éléments sont habituellement éparpillés en mémoire
2

1
1. Introduction

1.2. Définition:
Une liste chaînée est un ensemble d’éléments contenus
chacun dans une cellule (ou nœud ou maillon).

Chaque cellule contient, en plus de l’élément, l’adresse


de l’élément suivant appelée pointeur.
Tête de cellule
liste
Elem Elem
Fin de liste
Elem
(Nil)

Figure 1: Structure d’une liste chaînée 3

1. Introduction

Il existe trois types de listes:

• Les listes simplement chaînées: Dans ce type de listes, les


éléments sont chaînés à l’aide d’un seul pointeur afin de parcourir
la liste du premier au dernier élément.

• Les listes doublement chaînées: Dans ces listes, les éléments sont
chaînées à l’aide de deux pointeurs, et non un seul, ce qui permet de
parcourir la liste dans les deux sens.

• Les listes circulaires: dans ces listes, le dernier élément pointe sur
le premier.
4

2
1. Introduction

1.3. Déclaration d’une liste chaînée :

Types
cellule =enregistrement
Elem: entier //valeur à stocker
Suiv: ^ cellule // adresse de l’élément suivant
Fin enregistrement
Liste= ^ cellule
Variables
L: Liste

1. Introduction

Lorsqu’on déclare une liste, on l’initialise à NIL pour pouvoir


ensuite allouer le premier élément.

//déclaration de 2 listes chaînées différentes mais équivalentes


ma_liste1: ^ cellule
ma_liste2: Liste

Début
ma_liste1 ←Nil
ma_liste2 ←Nil
fin

3
2. Création et affichage d’une liste
2.1. Création d’une liste chaînée:
Procédure CreationElement( Tête:Liste)
Début
Allouer (Tête)
Ecrire(" entrer un entier")
lire(Tête^. Elem)
Tête^. Suiv←Nil
Fin
Tête de
liste
Fin de liste
Elem
(Nil)

Figure 2: Création d’une liste 7

2. Création et affichage d’une liste


2.1. Création d’une liste chaînée:
Procédure CreationListe(n: entier, L:Liste)
Variables: Tête, P: Liste
i: entier
L
Début
CreationElement(Tête) Elem Nil
L ←Tête
Pour i de 2 à n faire
CreationElement(P) Elem Nil
L^. Suiv ←P P
L ←P
FinPour Figure 3: Processus de création
L ←Tête 8
Fin

4
2. Création et affichage d’une liste
2.1. Création d’une liste chaînée:
Procédure CreationListe(n: entier, L:Liste)
Variables: Tête, P: Liste
i: entier
L
Début
CreationElement(Tête) Elem
L ←Tête
Pour i de 2 à n faire
CreationElement(P) Elem Nil
L^. Suiv ←P P
L ←P
FinPour Figure 4: Garder la tête de liste
L ←Tête 9
Fin

2. Création et affichage d’une liste


2.2. Affichage d’une liste chaînée:
Procédure AffichageListe(L:Liste)
Variables:
P: Liste
Début
P ←L
Tantque (P<>Nil) faire
Ecrire(P^. Elem)
P ← P^. Suiv
FinTQ
Fin
10

5
2. Création et affichage d’une liste
Dans certains cas, il faut tester si la liste est vide

Procédure affichage(L:Liste)
Début
si L = NIL alors
écrire (« liste vide »)
sinon
AffichageListe(L)
finsi
Fin

On peut utiliser une fonction qui renvoie 1 si la liste est vide et 0


sinon. 11

2. Création et affichage d’une liste


fonction estvide(L:Liste): entier
Début fonction estvide(L:Liste): entier
si L = NIL alors ou Début
retourner 1 retourner (L = NIL)
sinon Fin
retourner 0
finsi
Fin
Procédure affichage(L:Liste)
Début
si estvide(L) alors
écrire (« liste vide »)
sinon
AffichageListe(L)
finsi
Fin 12

6
3. Recherche d’un élément dans un liste
Le but est de renvoyer l’adresse du premier élément trouvé ayant une
certaine valeur. On parcourt donc la liste jusqu’au bout et dès qu’on
trouve l’élément qui correspond à ce que l’on cherche, on renvoie
son adresse qui est égale à NIL si l’élément n’existe pas.
Procédure Recherche(x: entier, L:Liste, tmp: Liste)
Variables:
P: Liste
Début
P ←L tmp ←NIL
Tantque (P<>Nil) faire
si ( P ^. Elem=x) alors tmp ← P
finsi
P ← P ^. Suiv
FinTQ
fin 13

4. Insertion d’un élément

Lorsque nous voulons ajouter un élément dans une liste


chaînée, il faut savoir où l’insérer. Les deux ajouts
génériques des listes sont les ajouts en tête, et en fin de liste.

4.1. Insertion en tête de liste:


Lors de l’ajout en tête, nous allons créer un élément, lui
assigner la valeur que l’on veut ajouter puis raccorder cet
élément à la liste passée en paramètre. Lors d’un ajout en
tête, il suffit de créer un nouveau élément puis de le relier au
début de la liste originale. Il s’agit donc d’assigner à Suiv
l’adresse du premier élément de la liste.

14

7
4.1. Insertion en tête de liste
Procédure AjouterEnTete(Var L:Liste, valeur: entier)
Variables:
P: Liste
Début
Allouer (P) // créer un nouvel élément
P^. Elem ← valeur //assigner la valeur au nouvel élément
P^. Suiv←L //on assigne l’adresse de l’élément suivant au
//nouvel élément
Tête de liste
L ←P
(L)
Fin
Elem Elem Nil

Elem
15
Figure 5: Principe d’insertion d’un élément en tête de liste

4.2. Insertion en fin de liste


4.2. Insertion en fin de liste:

On crée tout d’abord un nouvel élément, lui assigner sa


valeur et mettre l’adresse de l’élément suivant à NIL.

On crée un pointeur temporaire sur le type element qui va se


déplacer d’élément en élément et regarder si cet élément est
le dernier de la liste.

Enfin, on pointe le dernier élément de la liste originale sur le


nouvel élément crée.

16

8
4.2. Insertion en fin de liste
Procédure AjouterEnFin (L:Liste, valeur: entier)
Variables:
P, t: Liste
Début
Allouer (P) // créer un nouvel élément
P^. Elem ← valeur //assigner la valeur au nouvel élément
P^. Suiv←NIL //aucun élément ne va suivre
si(L = NIL) alors
L ←P
sinon //on parcours jusqu’à la fin
t←L
TQ (t ^. Suiv <> NIL) faire
t ← t ^. Suiv
fin TQ
t ^. Suiv ←P
Fin 17

5. Suppression d’un élément d’une liste


5.1. Suppression en tête:
Ici, on s’intéresse à la suppression du premier élément d'une
liste chaînée. Si la liste n’est pas vide, on stocke l’adresse du
2ième élément de la liste et on supprime le premier élément.

La difficulté consiste à ne pas perdre l'accès aux éventuels


éléments qui sont pointés par le premier.

Attention à ne pas libérer le premier élément avant d’avoir


stocker l’adresse du second, sans quoi il sera impossible de
la récupérer.
18

9
5.1. Suppression en tête
Tête de
liste
Elem Elem Elem Nil

Figure 6: Principe de suppression en tête de la liste

Procédure supprimerEnTete (L :Liste)


Variables:
P: Liste
Début
si L <> NIL alors P←L
L ← L ^. Suiv
libérer(P)
finsi
Fin

5.2. Suppression en fin


Cette fois, il va falloir parcourir la liste jusqu’à son dernier élément, indiquer
que l’avant dernier élément va devenir le dernier élément .
Procédure supprimerEnFin (L :Liste)
Variables:
tmp, ptmp: Liste
Début
si L ^. Suiv =NIL alors L←NIL
sinon //tant qu’on n’est pas au dernier élément
tmp ← L
ptmp ← L //A la sortie de la boucle, tmp
TQ(tmp ^. Suiv <>NIL) faire //pointe sur le dernier élément et
ptmp ←tmp //ptmp sur l’avant-dernier
tmp ← tmp ^. Suiv ptmp ^. Suiv ←NIL
finTQ libérer(tmp)
finsi
Fin 20

10

Vous aimerez peut-être aussi