Académique Documents
Professionnel Documents
Culture Documents
LISTES CHAINEES
I. Introduction
Les tableaux sont des structures de données fréquemment utiliser pour résoudre les
problèmes de stockage d’un ensemble important d’élément de même type en mémoire.
Cependant, l’utilisation des tableaux présente des contraintes concernant la taille et l’espace
mémoire occupée. Les tableaux doivent avoir une taille fixe définie au début du programme
pour pouvoir allouer cette espace dans la mémoire centrale de manière contigüe. Ceci peut
constituer un problème si la taille du tableau est très grande. En outre, il est possible que
l’utilisation de cet espace réservé soit réduite, ce qui engendre une perte de la capacité
mémoire de la machine. Par exemple, c’est une perte d’espace mémoire si nous créons un
tableau de mille éléments puis nous utilisons seulement dix cases. Encore, si le tableau est
saturé il n’est pas possible d’ajouter d’autres éléments.
Pour résoudre les problèmes de mémoire mentionnés, il faut utiliser les structures abstraites
de données, tel que les listes, les files, les piles, les arbres, les graphes. Dans ce chapitre,
nous allons étudier les listes.
II. Définition
Les listes sont des structures de données abstraites qui permettent de créer des éléments
non contigus et non limités. Une liste chainée est simplement une liste d'objet de même
type dans laquelle chaque élément contient :
L'adresse de l'élément suivant ou une marque de fin s'il n'y a pas de suivant. C'est ce
lien via l'adresse de l'élément suivant contenue dans l'élément précédent qui fait la
« chaine » et permet de retrouver chaque élément de la liste.
1|Page
4 LISTES CHAINEES ASD2
Une position dans un fichier : C'est le numéro d'ordre de l'objet dans le fichier.
Que la liste chainée soit bâtie avec des pointeurs ou des entiers, c'est toujours le terme de
pointeur qui est utilisé : chaque élément « pointe » sur l'élément suivant, c'est-à-dire
possède le moyen d'y accéder. Une liste chainée peut se représenter ainsi :
Tête Queue
Les listes chainées dynamique donnent une solution pour remédier aux problèmes de
l’optimisation de l’utilisation de la mémoire, mais elles ont aussi des inconvénients. Le
tableau suivant résume les différences entre les tableaux et les listes.
2|Page
4 LISTES CHAINEES ASD2
Un champ de données : qui peut être une donnée simple (entier, réel, etc.) ou
composée tel qu’une structure.
Il existe deux modes de chainage des éléments d’une liste : le chainage simple et le chainage
double.
Elle consiste à ajouter à chaque élément un champ qui contient l’adresse mémoire de
l’élément suivant dans la liste. Le schéma suivant donne exemple de chainage simple :
Tête Queue
Suivant
Suivant
Suivant
NULL
Ainsi, il est possible de parcourir la liste d’un élément à un autre dans un seul sens en
commençant par la tête de la liste puis prendre l’adresse de l’élément suivant jusqu’à arriver
à l’adresse vide (NULL).
3|Page
4 LISTES CHAINEES ASD2
Elle consiste à ajouter à chaque élément deux champs, le premier contient l’adresse
mémoire de l’élément suivant, le deuxième champ contient l’adresse de l’élément
précédent. Le schéma suivant donne exemple de chainage double :
Tête Queue
Précédent
Précédent
Suivant
Suivant
NULL
NULL
Une liste à chainage double permet de parcourir la liste dans les deux sens de la tête vers la
queue et inversement ce qui rend le parcours de la liste plus flexible et plus rapide.
Initialisation d’une liste : initialiser les pointeurs tête et queue à NULL et le nombre
d’élément à zéro.
La différence entre les mises à jour pour les deux chainages c’est que pour le chainage
double il faut mettre à jour les deux champs « Suivant » et « Précédent », tandis que pour le
chainage simple il faut mettre à jour le champ « Suivant » seulement. Egalement, les champs
« Tête », « Queue », et « Nombre » doivent être mis à jour selon le cas lors de l’ajout ou de
la suppression.
4|Page
4 LISTES CHAINEES ASD2
Pour ajouter un élément à la liste il faut le créer, c’est-à-dire lui allouer de l’espace mémoire
puis l’ajouter à la position désirée soit au début, soit au milieu, soit à la fin de la liste.
L’insertion de l’élément implique la mise à jour des champs adresses suivants et précédents
qui sont concernés par l’ajout. Egalement, il faut mettre à jour le champ qui indique le
nombre d’élément de la liste et mettre à jour selon le cas le pointeur de la tête ou le
pointeur de la queue.
a. Ajout au début
Tête
Queue
Suivant
Suivant
Suivant
NULL
Donnée Donnée Donnée Donnée
b. Ajout au milieu
Suivant
Donnée
Tête Queue
Suivant
Suivant
Suivant
NULL
Donnée Donnée Donnée Donnée
c. Ajout à la fin
Queue
Tête
Suivant
Suivant
Suivant
NULL
La suppression d’un élément de la liste implique des modifications comme l’ajout d’élément.
La suppression du premier élément implique le changement du pointeur de la tête vers
l’élément suivant. La suppression du dernier élément implique le changement du pointeur
de la queue vers l’élément précédent. Si l’élément à supprimer est au milieu alors il faut
changer le chainage avec l’élément précédent et l’élément suivant.
5|Page
4 LISTES CHAINEES ASD2
a. Supprimer la tête
Tête
Queue
Suivant
Suivant
Suivant
NULL
Donnée Donnée Donnée Donnée
b. Supprimer la queue
Queue
Tête
Suivant
Suivant
NULL
NULL
Donnée Donnée Donnée Donnée
c. Supprimer au milieu
Tête Queue
Suivant
Suivant
Suivant
NULL
Donnée Donnée Donnée Donnée
V. Quelques algorithmes
1. Chainage simple avec adresse de Tête seulement
Dans ce qui suit nous allons présenter quelques algorithmes pour la gestion d’une liste à
simple chainage. Chaque élément de la liste contient un entier et un pointeur qui pointe sur
l’élément suivant. On suppose que les éléments de la liste ne sont pas triés. Les structures
qui définissent la liste sont comme suit :
Structure Element
Donnée : entier
Suivant : pointeur sur Element
Fin structure
Structure Liste
Tête : pointeur sur Element
Taille : entier
Fin structure
6|Page
4 LISTES CHAINEES ASD2
Initialisation
L->Taille L->Taille+1
Fin procédure
Si Ptr<>Null alors
Retourne Pos
Sinon
Retourne -1
Fin si
Fin fonction
7|Page
4 LISTES CHAINEES ASD2
Fin
Supprimer un élément
Si Ptr<>Null alors
Si Ptr=L->Tête alors //Si l’élément est la tête
L->Tête Ptr->Suivant
Sinon
Pred->SuivantPtr->Suivant
Fin si
Libérer(Ptr)
L->TailleL->Taille-1
Retourne 1
Sinon
8|Page
4 LISTES CHAINEES ASD2
Retourne 0
Fin si
Fin fonction
Les algorithmes suivant permettent la gestion d’une liste à simple chainage contenant
l’adresse de la tête et la queue à la fois. Chaque élément de la liste contient un entier et un
pointeur qui pointe sur l’élément suivant. On suppose que les éléments de la liste ne sont
pas triés. Les structures qui définissent la liste sont comme suit :
Structure Element
Donnée : entier
Suivant : pointeur sur Element
Fin structure
Structure Liste
Tête : pointeur sur Element
Queue : pointeur sur Element
Taille : entier
Fin structure
Initialisation
Fin procédure
9|Page
4 LISTES CHAINEES ASD2
Supprimer un élément
Si Ptr<>Null alors
Si Ptr=L->Tête alors
L->Tête Ptr->Suivant
Sinon
Pred->SuivantPtr->Suivant
Fin si
Si Ptr=L->Queue alors
L->QueuePred
Fin si
Libérer(Ptr)
L->TailleL->Taille-1
Retourne 1
Sinon
Retourne 0
Fin si
Fin fonction
10 | P a g e