Vous êtes sur la page 1sur 106

LES STRUCTURES DE

DONNEES

Semestre 4
Département d’Informatique Pr. BELAQZIZ Salwa 2021-2022
Structures de Données
Plan
1
Les structures

2
La récursivité

3
Les listes chaînées

4
Les Piles et les Files

5
Les Arbres
Pr. Salwa BELAQZIZ 2
3 Introduction
Les
Listes
Chaînées

Programme = structures de données + algorithmes

 Une structure de données est une représentation des relations


logiques qui existent entre les éléments individuels d'une
catégorie de données.

Pr. Salwa BELAQZIZ 3


3 Introduction
Les
Listes
Chaînées

 L'objectif des structures de données est le stockage des éléments


auxquels ont souhaite accéder plus tard. On appel les différentes
utilisation possible de la structure de données des opérations
(lecture, insertion, suppression,...)

 Les opérations et le coût (la complexité) différent d'une structure


à une autre : il est nécessaire de choisir la structure de données la
plus adaptée (celle pour laquelle les opérations sont les moins
coûteuses).

 Bien connaître ses structures de données et savoir faire un choix


joue donc un rôle très important pour le programmeur.
Pr. Salwa BELAQZIZ 4
3 Introduction
Les
Listes
Chaînées

Organisation des données en mémoire :

 Contiguë : les éléments se trouvent en des adresses


consécutives, l'un après l'autre.

 Non contiguë : les éléments se trouvent en des adresses


dispersées.

Pr. Salwa BELAQZIZ 5


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Primitives (individuels) : entiers, réels, caractères, ...

 Non primitives (composés) : tableaux, listes, fichiers,....

Pr. Salwa BELAQZIZ 6


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
o Piles
o Files

 Non linéaires :
o Arborescentes: Arbres
o Relationnelles: Graphes

Pr. Salwa BELAQZIZ 7


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 8
3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 9
3 Terminologie
Les
Listes
Chaînées

 Une liste est une séquence finie formée de 0 ou plusieurs


éléments de même type.

 Chaque élément dans une liste est caractérisé


o par son rang (sa place) dans cette liste
o Son contenu

 La longueur d'une liste est son nombre d'éléments.

 Une liste de longueur N dispose alors de N rangs (de 1 à N, par


exemple)

Pr. Salwa BELAQZIZ 10


3 Terminologie
Les
Listes
Chaînées
Parties d'une liste (non vide) L = (e1, e2, ....., eN) :

 L'élément e1 est appelé la tête de la liste : c'est son premier élément.

 (e2,..., eN) est appelée la queue de la liste (ou son reste). Il s'agit d'une liste.

 L'élément ei+1 est le successeur de l'élément ei (l'élément eN n'a pas de


successeur).

 L'élément ei-1 est le prédécesseur de l'élément ei (l'élément e1 n'a pas de


prédécesseur).

Pr. Salwa BELAQZIZ 11


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 12
3 Opérations sur les listes
Les
Listes
Chaînées

 Opérations fondamentales (de type « dictionnaire »):


o L'insertion d'un élément
o La suppression d'un élément
o La recherche d'un élément

 Quelques opérations de type « requête »:


o Savoir si la liste est vide
o Calculer la longueur d'une liste
o Calculer le nombre d'occurrences d'un élément dans une
liste,...etc

Pr. Salwa BELAQZIZ 13


3 Opérations sur les listes
Les
Listes
Chaînées

 D’autres opérations :
o La fusion (ou la concaténation) de plusieurs listes.

o La recopie d'une liste.

o Le renversement d'une liste.

o Le tri (sorting) d'une liste.

o Le partitionnement d'une liste;

o etc ...
Pr. Salwa BELAQZIZ 14
3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 15
3 Implémentation des listes
Les
Listes
Chaînées

 Deux méthodes pour implémenter une liste :

o Implémentation contiguë à l'aide d'un tableau.

o Implémentation non contiguë à l'aide d'une liste chaînée


basée sur le pointeurs.

Pr. Salwa BELAQZIZ 16


3 Implémentation contiguë
Les
Listes
Chaînées

 Une solution contiguë par tableau consiste à créer une structure


composée de deux champs :
o Un tableau qui stocke les différents éléments de la liste.
o Une variable qui mémorise le nombre des éléments
couramment présents dans la liste.

 Un tableau est un ensemble d'éléments en nombre fixé,


mémorisés dans une zone contiguë et accessible par un indice.

Pr. Salwa BELAQZIZ 17


3 Implémentation contiguë
Les
Listes
Chaînées

Avantages :
 Simplicité

 L'opération d'accès à un élément est très rapide

 Très utiles pour représenter des structures linéaires statiques :


o Ensembles au sens mathématique
o Vecteurs
o Matrices

Pr. Salwa BELAQZIZ 18


3 Implémentation contiguë
Les
Listes
Chaînées

Inconvénients :

 La taille d'un tableau statique est fixe. D'où la nécessité de


spécifier une borne supérieure de cette taille au moment de la
compilation, ce qui entraîne d'allouer une quantité de mémoire
qui peut être non utilisable totalement.

 L'insertion en une position intermédiaire d'un nouvel élément est


coûteuse car elle nécessite le décalage des éléments existants.

 La suppression effective d'un élément est impossible.

Pr. Salwa BELAQZIZ 19


3 Implémentation contiguë
Les
Listes
Chaînées

Exemple : Une liste d'entiers implémentée par un tableau

 Déclaration de la structure pour l'implémentation contiguë

Pr. Salwa BELAQZIZ 20


3 Implémentation contiguë
Les
Listes
Chaînées

Opérations de création d'une liste :

 Créer une liste : il suffit d'initialiser length à 0

Pr. Salwa BELAQZIZ 21


3 Implémentation contiguë
Les
Listes
Chaînées

1. Opérations de création d'une liste :

 Créer une liste depuis un tableau : il suffit de recopier les


éléments du tableau passé en argument dans le tableau A, puis de
modifier la valeur de length à n (n la taille du tableau)

Pr. Salwa BELAQZIZ 22


3 Implémentation contiguë
Les
Listes
Chaînées 2. Quelques opérations de type "requête" :
 Tester si une liste est vide : il suffit de tester si length = 0

 Tester si une liste est saturée (pleine) : il suffit de regarder si


length = MAX

 Accéder au Kième élément d'une liste : il suffit de retourner A[K-1].

23
Pr. Salwa BELAQZIZ
3 Implémentation contiguë
Les
Listes
Chaînées

3. Opérations d’insertion :

 Insérer un élément « e » à la fin :


1. Tester si la liste n'est pas pleine

2. Si c'est le cas, stocker l'élément « e » dans A[length], puis


incrémenter length.

Pr. Salwa BELAQZIZ 24


3 Implémentation contiguë
Les
Listes
Chaînées

3. Opérations d’insertion :

 Insérer un élément « e » au rang « K » :


1. Tester si la liste n'est pas pleine
si oui :
2. Décaler à droite les éléments A[length], A[length-1],....,A[k];
3. Stocker « e » dans A[k];
4. Incrémenter length.

Pr. Salwa BELAQZIZ 25


3 Implémentation contiguë
Les
Listes
Chaînées

3. Opérations d’insertion :
 Insérer un élément au rang K : (code C)

Pr. Salwa BELAQZIZ 26


3 Implémentation contiguë
Les
Listes
Chaînées

3. Opérations d’insertion :

 Insérer un élément au début :

Cette opération est un cas particulier de l'insertion au rang k (k=0)

Pr. Salwa BELAQZIZ 27


3 Implémentation contiguë
Les
Listes
Chaînées

4. Opérations de suppression :

 Supprimer un élément à la fin :


1. Tester si la liste n'est pas vide

2. Si c'est le cas, décrémenter length

Pr. Salwa BELAQZIZ 28


3 Implémentation contiguë
Les
Listes
Chaînées

4. Opérations de suppression :

 Supprimer un élément au rang k:


1. Tester si la liste n'est pas vide
Si oui :
2. Décaler à gauche les éléments A[k+1], A[k+2],..., A[length]
3. Décrémenter length

Pr. Salwa BELAQZIZ 29


3 Implémentation contiguë
Les
Listes
Chaînées

4. Opérations de suppression :

 Supprimer un élément au début :

Cette opération est un cas particulier de la suppression au rang k


(k=0)

Pr. Salwa BELAQZIZ 30


3 Implémentation contiguë
Les
Listes
Chaînées

5. Opérations de recherche :

 Recherche séquentielle :
Parcourir (traverser) la liste de gauche à droite (ou de droite à
gauche) jusqu'à trouver l'élément « e ».

Pr. Salwa BELAQZIZ 31


3 Implémentation contiguë
Les
Listes
Chaînées

5. Opérations de recherche :

 Recherche binaire (dichotomique) :


 S'applique uniquement si le tableau est trié
 Algorithme (récursif de type « diviser pour régner »):
1. Calculer le milieu m du tableau A[d..f]
2. Comparer l'élément recherché avec A[m]

Il y a 3 cas :
a. Si e=A[m], on retourne True
b. Si e < A[m], on lance la recherche dans le sous-tableau A[d..m-1]
c. Si e > A[m], on lance la recherche dans le sous-tableau A[m+1..f]
Pr. Salwa BELAQZIZ 32
3 Implémentation contiguë
Les
Listes
Chaînées

Opérations de recherche :
 Code C de la recherche binaire (dichotomique) :

Pr. Salwa BELAQZIZ 33


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 34
3 Implémentation Chaînée
Les
Listes
Chaînées

 La représentation chaînée permet de réaliser une implémentation


non contiguë

 Chaque élément est appelé un « nœud » ou « cellule »

 Chaque nœud est une structure composée de deux membres :


o Le 1er membre est utilisé pour stocker le contenu d'un nœud.
o Le 2ème membre est utilisé pour stocker l'adresse du nœud
suivant.

Pr. Salwa BELAQZIZ 35


3 Implémentation Chaînée
Les
Listes
Chaînées

 L'existence dans chaque nœud d'un lien vers le nœud suivant,


facilite l'accès séquentiel aux différents nœuds d'une liste.

 Il suffit de suivre ces liens pour aller d'un nœud au nœud suivant

Pr. Salwa BELAQZIZ 36


3 Implémentation Chaînée
Les
Listes
Chaînées
Réalisation de la représentation chaînée :

 On peut utiliser des pointeurs pour lier entre eux les éléments
successifs.

 La liste est alors déterminée par l'adresse de son premier élément.

 Cette représentation nécessite de l'espace mémoire


supplémentaire pour les pointeurs, mais elle permet de traiter
facilement la plupart des opérations sur les liste : insertion,
suppression, parcours séquentiel, concaténation, se font par une
simple manipulation de pointeurs.
Pr. Salwa BELAQZIZ 37
3 Implémentation chaînée
Les
Listes
Chaînées

Exemple :
 Représentation en mémoire de la liste des patients selon leur
ordre d’arrivée dans une salle d’attente chez le médecin.

En allocation dynamique, les emplacements mémoires sont dispersés en


mémoire centrale. L’espace est réservé au fur et à mesure des créations des
éléments de la liste. La seule limite étant la taille de la mémoire centrale.

Pr. Salwa BELAQZIZ 38


3 Implémentation chaînée
Les
Listes
Chaînées Il existe différents type de listes chainées :

En fonction de la manière dont le chainage est utilisé pour maintenir


l’adjacence, plusieurs types de listes chaînées sont possibles :

- Les listes simplement chainées


Chaque nœud possède un lien vers le nœud suivant

Pr. Salwa BELAQZIZ 39


3 Implémentation chaînée
Les
Listes
Chaînées Il existe différents type de listes chainées :

- Les listes doublement chainées


Chaque nœud possède un lien vers le nœud suivant et un lien vers
le nœud précédent.

- Les listes circulaires


Liste simplement chaînée dans laquelle le dernier nœud possède
un lien vers le premier nœud de la liste.

Pr. Salwa BELAQZIZ 40


3 Implémentation chaînée
Les
Listes
Chaînées

- Les listes doublement chainées circulaires


• Le dernier nœud possède un lien vers le premier nœud de la liste
• Le premier nœud possède un lien vers le dernier nœud de la liste

- Les piles
Permet de stocker les données dans l’ordre LIFO (Last In First Out =
Dernier Entré Premier Sorti).

- Les files
Permet de stocker les données dans l’ordre FIFO (First In First Out =
Premier Entré Premier Sorti).

Pr. Salwa BELAQZIZ 41


3 Liste simplement chaînée
Les
Listes
Chaînées

 Une liste simplement chaînée, ou brièvement liste chaînée, alloue


séparément de l'espace mémoire pour chaque nouvel élément
dans un bloc mémoire propre appelé un « nœud » ou « cellule »

 Chaque nœud (node) contient deux champs :


o Un champs data qui stocke le contenu du nœud
o Un champs next qui stocke l'adresse du nœud suivant (un
pointeur)

Pr. Salwa BELAQZIZ 42


3 Liste simplement chaînée
Les
Listes
Chaînées
Caractéristique :

 Chaque nœud est alloué dans le tas (la mémoire libre dynamique)
en utilisant la fonction malloc().
=> la mémoire allouée au nœud continue d'exister jusqu'à sa
libération explicite via la fonction free()

 La tête (head) d'une liste chaînée est un pointeur vers le premier


nœud de cette liste

 La liste est complétement connue si l'on dispose de l'adresse de


son premier nœud
Pr. Salwa BELAQZIZ 43
3 Liste simplement chaînée
Les
Listes
Chaînées
Exemple : Représentation d’une liste chaînée d’entiers en C
1. Définition d'un type nœud d'une liste chaînée

2. Définition d'un type liste chaînée

Pr. Salwa BELAQZIZ 44


3 Liste simplement chaînée
Les
Listes
Chaînées
Exemple : Représentation d’une liste chaînée d’entiers en C

MÉMOIRE 45
Pr. Salwa BELAQZIZ
3 Liste simplement chaînée
Les
Listes
Chaînées
Exercice :
Définir un type pour représenter des listes d'employés, avec
comme information pour chaque employé, son code, son âge et
son salaire.

46
Pr. Salwa BELAQZIZ
3 Liste simplement chaînée
Les
Listes
Chaînées
Opérations de base sur une liste chaînée :
1. La création
2. L'insertion
3. La suppression
4. Le parcours

Pr. Salwa BELAQZIZ 47


3 Liste simplement chaînée
Les
Listes
Chaînées
Opérations de base sur une liste chaînée :
1. La création
2. L'insertion
3. La suppression
4. Le parcours

Pr. Salwa BELAQZIZ 48


3 Création d’un nœud d’une liste chaînée
Les
Listes
Chaînées

 La création d'une liste chaînée commence par la création d'un


nouveau nœud

 Il faut allouer suffisamment de mémoire pour créer un nœud en


utilisant la fonction malloc()

 En cas d‘échec de malloc(), la fonction retournera la valeur NULL,


sinon elle retournera un pointeur vers le nœud crée.

Pr. Salwa BELAQZIZ 49


3 Création d’un nœud d’une liste chaînée
Les
Listes
Chaînées
Algorithme :

 Allouer de la mémoire pour le nouveau nœud (la structure de type


« node »);

 Lire le contenu du nouveau nœud dans le champ data

 Mettre la valeur NULL au champs « next » du nœud crée

 Retourner un pointeur vers le nœud crée

Pr. Salwa BELAQZIZ 50


3 Création d’un nœud d’une liste chaînée
Les
Listes
Chaînées
Code C:

Pr. Salwa BELAQZIZ 51


3 Création d’une liste chaînée
Les
Listes
Chaînées

 La fonction createLinkedList(int n) va créer une liste chaînée


contenant n nœuds (la valeur de n est supposée non nulle)

 Chaque noud sera crée en appelant la fonction getNode()


précédemment définie

Pr. Salwa BELAQZIZ 52


3 Création d’une liste chaînée
Les
Listes
Chaînées
Algorithme :
 Créer le premier nœud en faisant appel à getNode() et affecter
son adresse à la liste.
 Assigner l'adresse de la tête de liste au pointeur désignant le
nœud courant.

 Répéter (n-1) fois, les étapes suivantes :


o Créer un nouveau nœud via getNode() et assigner son adresse
au nœud suivant du pointeur désignant le nœud courant
o Avancer le pointeur désignant le nœud courant (y mettre
l'adresse du nœud suivant)

 Retourner la liste ainsi créée. 53


Pr. Salwa BELAQZIZ
3 Création d’une liste chaînée
Les
Listes
Chaînées
Code C:

Pr. Salwa BELAQZIZ 54


3 Création d’une liste chaînée
Les
Listes
Chaînées
Code C (suite) :

Pr. Salwa BELAQZIZ 55


3 Création d’une liste chaînée
Les
Listes
Chaînées
Code C:
Programme qui crée une liste d'entiers de longueur 4

Pr. Salwa BELAQZIZ 56


3 Liste simplement chaînée
Les
Listes
Chaînées
Opérations de base sur une liste chaînée :
1. La création
2. L'insertion
3. La suppression
4. Le parcours

Pr. Salwa BELAQZIZ 57


3 Insertion d’un nœud
Les
Listes
Chaînées
 L'espace mémoire doit être alloué pour le nouveau nœud avant la
lecture des données.

 Les données sont ensuite lues et stockées dans le champ « data »


du nouveau nœud.

 Le champ du lien « next » du nœud crée est initialisé à NULL.

 Le nœud ainsi crée peut être inséré :


o Au début de la liste
o A une place intermédiaire
o A la fin de la liste
Pr. Salwa BELAQZIZ 58
3 Insertion d’un nœud au début de la liste
Les
Listes
Chaînées
Algorithme :
 Obtenir le nouveau nœud en utilisant la fonction getNode()

 Assigner l'adresse de la tête de la liste au champ « next » du


nouveau nœud

 Assigner l'adresse du nouveau nœud au pointeur pointant vers la


tête de la liste (pHead)

59
Pr. Salwa BELAQZIZ
3 Insertion d’un nœud au début de la liste
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 60


3 Insertion d’un nœud à la fin de la liste
Les
Listes
Chaînées
Algorithme (itératif) :
 Obtenir le nouveau nœud en utilisant la fonction getNode()
 Si la liste est vide, assigner l'adresse du nouveau nœud à la tête de
la liste (pHead)
 Sinon, parcourir la liste jusqu'à son dernier nœud, puis assigner
l'adresse du nouveau nœud au champ « next » du dernier nœud
de la liste.

Pr. Salwa BELAQZIZ 61


3 Insertion d’un nœud à la fin de la liste
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 62


3 Insertion d’un nœud à la fin de la liste
Les
Listes
Chaînées
Algorithme (récursif) :
 Si la liste est vide, créer un nouveau nœud, puis assigner son
adresse à la tête de la liste.

 Sinon, appliquer récursivement la procédure sur le pointeur


« next » de la tête de la liste.

Pr. Salwa BELAQZIZ 63


3 Insertion d’un nœud à la fin de la liste
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 64


3 Insertion d’un nœud à une position k
Les
Listes
Chaînées
Algorithme (cas général : 1 < k < N) :
 Obtenir le nouveau nœud en appelant la fonction getNode()

 Parcourir la liste jusqu'à atteindre la position k, en utilisant deux


pointeurs :
o « previous » : qui mémorisera le nœud précédent
o « current » : qui mémorisera le nœud courant

 Assigner au pointeur « next » du nœud pointé par « previous »,


l'adresse du nouveau nœud

 Assigner au pointeur « next » du nouveau nœud l'adresse du


nœud pointé par « current » 65
Pr. Salwa BELAQZIZ
3 Insertion d’un nœud à une position k
Les
Listes
Chaînées
Cas particuliers :

 Si la liste a une longueur inférieure à 3, alors la procédure échoue


pour toute valeur du paramètre k.

 Sinon, la procédure échoue pour les valeurs de k égales à 1 ou N

Pr. Salwa BELAQZIZ 66


3 Insertion d’un nœud à une position k
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 67


3 Insertion d’un nœud à une position k
Les
Listes
Chaînées
Code C (suite):

Pr. Salwa BELAQZIZ 68


3 Liste simplement chaînée
Les
Listes
Chaînées
Opérations de base sur une liste chaînée :
1. La création
2. L'insertion
3. La suppression
4. Le parcours

Pr. Salwa BELAQZIZ 69


3 Suppression d’un nœud
Les
Listes
Chaînées
 La mémoire occupée par le nœud à supprimer doit être restituée
(libérée) au système via la fonction free()

 Généralement, un nœud eut être supprimée :


o Au début de la liste
o En fin de liste
o A une position intermédiaire de la liste

Pr. Salwa BELAQZIZ 70


3 Suppression d’un nœud au début de liste
Les
Listes
Chaînées
Algorithme :
 Si la liste est vide, il n'y a rien à faire
 Sinon :
o Enregistrer le premier nœud de la liste dans une variable temporaire
« temp »
o Assigner l'adresse du deuxième nœud au pointeur vers la tête de la liste
o Libérer la mémoire occupée par « temp »

5 9 4 2
pHead

temp Pr. Salwa BELAQZIZ 71


3 Suppression d’un nœud au début de liste
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 72


3 Suppression d’un nœud à la fin de la liste
Les
Listes
Chaînées
Algorithme :
 Si la liste est vide, il n'y a rien à faire
Sinon :
 Si la liste contient un seul élément, affecter NULL à l'adresse de la
tête de la liste
Sinon :
 Parcourir la liste en utilisant deux pointeurs pour accéder au dernier
nœud et à l'avant dernier nœud de la liste;
 Assigner la valeur NULL au champs « next » de l'avant dernier nœud;
 Libérer la mémoire allouée par le dernier nœud.

5 9 4 2
pHead
Pr. Salwa BELAQZIZ 73
3 Suppression d’un nœud à la fin de la liste
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 74


3 Suppression d’un nœud à une position k
Les
Listes
Chaînées
Algorithme (cas général : 1 < k < N) :
 Parcourir la liste jusqu'à atteindre la position k, en utilisant deux pointeurs :
o « previous » qui mémorisera le nœud précédent
o « current » qui mémorisera le nœud courant
 previous -> next = current -> next
 Libérer la mémoire allouée au nœud pointé par « current »

5 9 4 2
pHead

previous current

Pr. Salwa BELAQZIZ 75


3 Suppression d’un nœud à une position k
Les
Listes
Chaînées
Cas particuliers :

 Si la liste a une longueur inférieure à 3, alors la procédure échoue


pour toute valeur du paramètre k.

 Sinon, la procédure échoue pour les valeurs de k égales à 1 ou N

Pr. Salwa BELAQZIZ 76


3 Suppression d’un nœud à une position k
Les
Listes
Chaînées
Code C :

Pr. Salwa BELAQZIZ 77


3 Suppression d’un nœud à une position k
Les
Listes
Chaînées
Code C (suite):

Pr. Salwa BELAQZIZ 78


3 Liste simplement chaînée
Les
Listes
Chaînées
Opérations de base sur une liste chaînée :
1. La création
2. L'insertion
3. La suppression
4. Le parcours

Pr. Salwa BELAQZIZ 79


3 Parcours séquentiel d’une liste chaînée
Les
Listes
Chaînées
Utilisations :
 Rechercher un élément d'une liste;
 Effectuer un même traitement à tous ou à certains éléments d'une
liste : affichage, somme, produit,...
 Trier une liste;
 Extraire une partie d'une liste;
 Calculer le nombre d'occurrence d'un élément dans une liste;
 ... etc

Pr. Salwa BELAQZIZ 80


3 Parcours séquentiel d’une liste chaînée
Les
Listes
Chaînées
Type de parcours d’une liste chaînée :

• Parcours "gauche-droite" :
On commence par le premier élément de la liste, puis le deuxième
élément, jusqu’au dernier élément.

• Parcours "droite-gauche" (sens inverse) :


On commence par le dernier élément de la liste, puis l’avant dernier
élément, jusqu’au premier élément.

Pr. Salwa BELAQZIZ 81


3 Exercice 1
Les
Listes
Chaînées
1. Écrire de manière itérative et récursive une fonction qui
recherche un élément dans une liste.

2. Écrire de manière itérative et récursive une fonction qui calcule le


nombre d’occurrence d’un élément dans une liste.

3. Écrire de manière itérative et récursive une fonction qui met au


carré tous les éléments d’une liste.

4. Écrire une fonction qui affiche à l’envers les éléments d’une liste.

Pr. Salwa BELAQZIZ 82


3 Exercice 1
Les
Listes
Chaînées
1. Recherche d’un élément dans une liste chaînée :

Pr. Salwa BELAQZIZ 83


3 Exercice 1
Les
Listes
Chaînées
1. Recherche d’un élément dans une liste chaînée :

Fonction récursive

Pr. Salwa BELAQZIZ 84


3 Exercice 1
Les
Listes
Chaînées
2. Nombre d’occurrence d’un élément dans une liste
chaînée :

Pr. Salwa BELAQZIZ 85


3 Exercice 1
Les
Listes
Chaînées
2. Nombre d’occurrence d’un élément dans une liste
chaînée :
Fonction récursive

Pr. Salwa BELAQZIZ 86


3 Exercice 1
Les
Listes
Chaînées
3. Mettre au carré tous les éléments d’une liste
chaînée :

Pr. Salwa BELAQZIZ 87


3 Exercice 1
Les
Listes
Chaînées
3. Mettre au carré tous les éléments d’une liste
chaînée :
Fonction récursive

Pr. Salwa BELAQZIZ 88


3 Exercice 1
Les
Listes
Chaînées
4. Affichage à l’envers des éléments d’une liste chaînée

Pr. Salwa BELAQZIZ 89


3 Introduction
Les
Listes
Chaînées

Les structures de données peuvent être :

 Linéaires :
o Tableaux
o Listes chaînées
Terminologie
Opérations
Implémentation
 Contiguë
 Non contiguë
o Piles
o Files
Pr. Salwa BELAQZIZ 90
3 Implémentation chaînée
Les
Listes
Chaînées Il existe différents type de listes chainées :

- Les listes simplement chainées


Chaque nœud possède un lien vers le nœud suivant

- Les listes doublement chainées


Chaque nœud possède un lien vers le nœud suivant et un lien vers
le nœud précédent

Pr. Salwa BELAQZIZ 91


3 Liste doublement chaînée
Les
Listes
Chaînées

 Une liste doublement chaînée (ou encore une liste


bidirectionnelle) est une liste chaînée dans les deux sens, c’est-à-
dire que chaque nœud contient deux liens : un lien vers le nœud
précédent et un lien vers le nœud suivant.

Sauf :
 Le premier nœud n’a pas de prédécesseur;
 Le dernier nœud n’a pas de successeur.

Pr. Salwa BELAQZIZ 92


3 Liste doublement chaînée
Les
Listes
Chaînées

Exemple : Liste doublement chaînée d’entiers

Pr. Salwa BELAQZIZ 93


3 Liste doublement chaînée
Les
Listes
Chaînées

Exemple : Liste doublement chaînée d’entiers

Pr. Salwa BELAQZIZ 94


3 Liste doublement chaînée
Les
Listes
Chaînées

Opérations :

 Les opérations de type dictionnaire (insertion, suppression et


recherche) sur une liste doublement chaînée sont principalement
les mêmes que celles sur une liste simplement chaînée.

Pr. Salwa BELAQZIZ 95


3 Liste doublement chaînée
Les
Listes
Chaînées

Création d’un nœud d’une liste doublement chaînée:

Pr. Salwa BELAQZIZ 96


3 Liste doublement chaînée
Les
Listes
Chaînées

Insertion d’un nœud au début d’une liste doublement chaînée:

97
Pr. Salwa BELAQZIZ
3 Liste doublement chaînée
Les
Listes
Chaînées

Insertion d’un nœud à la fin d’une liste doublement chaînée:

98
3 Liste doublement chaînée
Les
Listes
Chaînées Insertion d’un nœud à une position intermédiaire
1. Obtenir le nouveau nœud en utilisant "getNode()" :
newNode = getNode(x);
2. Vérifier que la position spécifiée est entre le premier nœud et
le dernier nœud.
 Sinon, signaler une erreur de position.
 Si oui, parcourir la liste jusqu’à atteindre la position désirée

3. Exécuter ensuite les instructions suivantes :


 newNode->prev = temp->prev;
 newNode->next = temp;
 temp->prev->next = newNode;
 temp->prev = newNode;
Pr. Salwa BELAQZIZ 99
3 Liste doublement chaînée
Les
Listes
Chaînées

Suppression d’un nœud au début d’une liste doublement chaînée:

Pr. Salwa BELAQZIZ 100


3 Liste doublement chaînée
Les
Listes
Chaînées

Suppression d’un nœud à la fin d’une liste doublement chaînée:

Pr. Salwa BELAQZIZ 101


3 Liste doublement chaînée
Les
Listes
Chaînées

Suppression d’un nœud sachant son adresse :

Pr. Salwa BELAQZIZ 102


3 Liste doublement chaînée
Les
Listes
Chaînées

Suppression d’un nœud sachant son adresse :


Explications :

 On vérifie que p ne pointe pas vers le dernier nœud par le test :


if(p->next != NULL)

 Si tel n’est pas le cas, alors on fait pointer le pointeur précédent


du nœud suivant vers le nœud précédent p :
p->next->prev = p->prev;

 On teste si p est le premier nœud :


if(p->prev == NULL)
Pr. Salwa BELAQZIZ 103
3 Liste doublement chaînée
Les
Listes
Chaînées

Suppression d’un nœud sachant son adresse :


Explications :

 Si tel est le cas, alors on fait pointer *pdL vers le nœud suivant p :
*pdL = p->next;

 Sinon, on fait pointer le pointeur suivant du nœud précédent vers


le nœud suivant p :
p->prev->next = p->next;

 À la fin, on libère la mémoire occupée par p :


free(p);
Pr. Salwa BELAQZIZ 104
3 Liste doublement chaînée
Les
Listes
Chaînées

Parcours « gauche » d’une liste doublement chaînée:

Pr. Salwa BELAQZIZ 105


3 Liste doublement chaînée
Les
Listes
Chaînées

Parcours « droit » d’une liste doublement chaînée:

Pr. Salwa BELAQZIZ 106

Vous aimerez peut-être aussi