0% ont trouvé ce document utile (0 vote)
23 vues43 pages

Introduction aux listes chaînées en C

Le chapitre traite des listes chaînées, une structure de données dynamique permettant de relier des éléments de même type. Il présente les types de listes, notamment les listes simplement chaînées et doublement chaînées, ainsi que leurs représentations et primitives d'opérations. Les primitives incluent la création, l'insertion, la suppression et la destruction des listes, avec des exemples illustratifs.

Transféré par

edutec789
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
23 vues43 pages

Introduction aux listes chaînées en C

Le chapitre traite des listes chaînées, une structure de données dynamique permettant de relier des éléments de même type. Il présente les types de listes, notamment les listes simplement chaînées et doublement chaînées, ainsi que leurs représentations et primitives d'opérations. Les primitives incluent la création, l'insertion, la suppression et la destruction des listes, avec des exemples illustratifs.

Transféré par

edutec789
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi