Académique Documents
Professionnel Documents
Culture Documents
Listes chaines
Algorithmique
Chapitre 10
Listes chanes
12
14
10
24
Pour atteindre la troisime case du tableau il suffit d'crire Tablo[3] qui contient 10, si les valeurs
de lindice commencent 1.
La structure de type tableau pose des problmes pour insrer ou supprimer un lment car ces
actions ncessitent des dcalages du contenu des cases du tableau qui prennent du temps dans
l'excution d'un programme.
Ce type de stockage de valeurs peut donc tre coteux en temps d'excution. Il existe une autre
structure, appele liste chane, pour stocker des valeurs, cette structure permet plus aisment
d'insrer et de supprimer des valeurs dans une liste linaire d'lments.
1 / 12
DVD-MIAGE
Listes chaines
Algorithmique
Soit la liste chane suivante (@ indique que le nombre qui le suit reprsente une adresse) :
Adresses
Donnes
Pointeurs
@:3
Voici
24
@ : 24
une
8
@:8
liste
56
@ : 56
chane
Nil
Pour accder au troisime lment de la liste il faut toujours dbuter la lecture de la liste par son
premier lment dans le pointeur duquel est indiqu la position du deuxime lment. Dans le
pointeur du deuxime lment de la liste on trouve la position du troisime lment
Pour ajouter, supprimer ou dplacer un lment il suffit d'allouer une place en mmoire et de mettre
jour les pointeurs des lments.
Il existe diffrents types de listes chanes :
Liste chane simple constitue d'lments relis entre eux par des pointeurs.
Liste chane ordonne o l'lment suivant est plus grand que le prcdent. L'insertion et la
suppression d'lment se font de faon ce que la liste reste trie.
Liste doublement chane o chaque lment dispose non plus d'un mais de deux pointeurs
pointant respectivement sur l'lment prcdent et l'lment suivant. Ceci permet de lire la
liste dans les deux sens, du premier vers le dernier lment ou inversement.
Liste circulaire o le dernier lment pointe sur le premier lment de la liste. S'il s'agit d'une
liste doublement chane alors de premier lment pointe galement sur le dernier.
Ces diffrents types peuvent tre mixs selon les besoins.
On utilise une liste chane plutt qu'un tableau lorsque l'on doit traiter des objets reprsents par
des suites sur lesquelles on doit effectuer de nombreuses suppressions et de nombreux ajouts. Les
manipulations sont alors plus rapides qu'avec des tableaux.
Rsum
Structure
Tableau
Liste chane
Dimension
Fixe
Ajout
Suppression
Type de Liste
PILE
Tte
Tte
FILE
Queue
Tte
La pile est une structure de liste similaire une pile d'assiettes o l'on pose et l'on prend au sommet
de la pile.
La file est une structure de liste similaire une file d'attente une caisse, le premier client entr
dans la file est le premier sorti de celle-ci (aucun resquillage n'est admis).
Chapitre 10
2 / 12
DVD-MIAGE
Listes chaines
Algorithmique
2. Listes chanes
2.1. Dfinitions
Un lment d'une liste est l'ensemble (ou structure) form :
d'une donne ou information,
d'un pointeur nomm Suivant indiquant la position de l'lment le suivant dans la liste.
A chaque lment est associe une adresse mmoire.
Les listes chanes font appel la notion de variable dynamique.
Une variable dynamique:
est dclare au dbut de l'excution d'un programme,
elle y est cre, c'est--dire qu'on lui alloue un espace occuper une adresse de la mmoire,
elle peut y tre dtruite, c'est--dire que l'espace mmoire qu'elle occupait est libr,
l'accs la valeur se fait l'aide d'un pointeur.
Un pointeur est une variable dont la valeur est une adresse mmoire (voir chapitre 9). Un pointeur,
not P, pointe sur une variable dynamique note P^.
Le type de base est le type de la variable pointe.
Le type du pointeur est l'ensemble des adresses des variables pointes du type de base. Il est
reprsent par le symbole ^ suivi de l'identificateur du type de base.
Info
Exemple:
3
Suivant
Essai
Nil
P^
La variable pointeur P pointe sur l'espace mmoire P^ d'adresse 3. Cette cellule mmoire contient la
valeur "Essai" dans le champ Info et la valeur spciale Nil dans le champ Suivant. Ce champ servira
indiquer quel est llment suivant lorsque la cellule fera partie dune liste. La valeur Nil indique
quil ny a pas d'lment suivant. P^ est l'objet dont l'adresse est range dans P.
Les listes chanes entranent l'utilisation de procdures d'allocation et de libration dynamiques de
la mmoire. Ces procdures sont les suivantes:
Allouer(P) : rserve un espace mmoire P^ et donne pour valeur P l'adresse de cet espace
mmoire. On alloue un espace mmoire pour un lment sur lequel pointe P.
Dsallouer(P) : libre l'espace mmoire qui tait occup par l'lment supprimer P^ sur
lequel pointe P.
Pour dfinir les variables utilises dans l'exemple ci-dessus, il faut :
dfinir le type des lments de liste :
Type Cellule= Structure
Info : Chane
Suivant : Liste
fin Structure
dfinir le type du pointeur :
Type Liste = ^Cellule
dclarer une variable pointeur :
Var P : Liste
allouer une cellule mmoire qui rserve un espace en mmoire et donne P la valeur de
l'adresse de l'espace mmoire P^ : Allouer(P)
affecter des valeur l'espace mmoire P^:
P^.Info "Essai" ; P^.Suivant Nil
Quand P = Nil alors P ne pointe sur rien.
Chapitre 10
3 / 12
DVD-MIAGE
Listes chaines
Algorithmique
3
Tte
@ :3
12
4
@:4
14
2
@:1
24
Nil
Si P a pour valeur 2
P^.Info
a pour valeur 10
P^.Suivant a pour valeur 1
4 / 12
DVD-MIAGE
Listes chaines
Algorithmique
Tete Nil
1
Tte
Nil
Allouer(P)
2
Tte
Nil
@:3
Lire(P^.Info)
3
Tte
Nil
@:3
Premire
Chapitre 10
5 / 12
DVD-MIAGE
Listes chaines
Algorithmique
P^.Suivant Nil
4
Tte
Nil
@:3
Premire
Nil
Tete P
5
Tte
3
@:3
Premire
Nil
Allouer(P)
6
Tte
3
@:3
@ : 24
Premire
Nil
Lire(P^.Info)
7
Tte
3
@:3
@ : 24
Premire
Nil
chane
P^.Suivant Tete
8
Tte
3
@ :3
@ : 24
Premire
Nil
chane
3
Tete P
9
Tte
24
Chapitre 10
@ :3
@ : 24
Premire
Nil
chane
3
6 / 12
DVD-MIAGE
Listes chaines
Algorithmique
2.3.2 Crer une liste chane compose de plusieurs lments de type chane de caractres
Dclarations des types pour la liste :
Type Liste = ^Element
Type Element = Structure
Info : chane de caractres
Suivant :
Liste
fin Structure
Pour crer une liste chane contenant un nombre d'lments prciser par l'utilisateur il suffit
d'introduire deux variables de type Entier NombreElt et Compteur
de faire saisir la valeur de NombreElt par l'utilisateur ds le dbut du programme,
d'crire une boucle Pour Compteur allant de 1 NombreElt comprenant les instructions 6, 7,
8 et 9.
Algorithme CrationListeNombreConnu
Tete, P : Liste
NombreElt : entier
Compteur : entier
DEBUT
Lire(NombreElt)
Tete Nil
POUR Compteur DE 1 A NombreElt FAIRE
Allouer(P)
/* rserve un espace mmoire pour llment ajouter */
Lire(P^.Info)
/* stocke dans l'Info de l'lment point par P la valeur saisie */
P^.Suivant Tete
/* lment insr en tte de liste */
Tete P
/* le pointeur Tete pointe maintenant sur P */
FIN POUR
FIN
Pour crer une liste chane contenant un nombre indtermin d'lments il faut :
dclarer une variable de lecture de mme type que celui de linformation porte par la liste,
dterminer et indiquer l'utilisateur la valeur qu'il doit saisir pour annoncer qu'il n'y a plus
d'autre lment ajouter dans la chane (ici "XXX"),
crire une boucle Tant Que permettant d'excuter les instructions 6, 7, 8 et 9 tant que la valeur
saisie par l'utilisateur est diffrente de la valeur indiquant la fin de l'ajout d'lment dans la
chane.
Algorithme CrationListeNombreInconnu
Tete, P : Liste
Valeur : chane de caractres
DEBUT
Tete Nil
Lire (Valeur)
TANT QUE que Valeur "XXX" FAIRE
Allouer(P)
/* rserve un espace mmoire pour llment ajouter */
P^.Info Valeur
/* stocke dans l'Info de l'lment point par P la valeur saisie */
P^.Suivant Tete
/* lment insr en tte de liste */
Tete P
/* le pointeur Tete pointe maintenant sur P */
Lire (Valeur)
FIN TANT QUE
FIN
Chapitre 10
7 / 12
DVD-MIAGE
Listes chaines
Algorithmique
@ : 24
premire
8
@:8
liste
56
@ : 56
chaine
Nil
L'algorithme est donn sous forme d'une procdure qui reoit la tte de liste en paramtre.
Procedure AfficherListe (Entre
P : Liste)
/* Afficher les lments dune liste chane passe en paramtre */
DEBUT
1
P Tete
/* P pointe sur le premier lment de la liste*/
/* On parcourt la liste tant que l'adresse de l'lment suivant n'est pas Nil */
/* si la liste est vide Tete est Nil */
TANT QUE P <> NIL FAIRE
2
Ecrire(P^.Info)
/* afficher la valeur contenue l'adresse pointe par P */
3
P P^.Suivant
/* On passe l'lment suivant */
FIN TANT QUE
FIN
1
2
3
2
3
2
3
2
3
P a pour valeur 3
"Ma" saffiche
P prend pour valeur 24
"premire" saffiche
P prend pour valeur 8
"liste" saffiche
P prend pour valeur 56
"chane" saffiche
P prend pour valeur Nil
On sarrte puisque P a pour valeur Nil et que cest la condition darrt de la boucle Tant Que.
2.3.4. Rechercher une valeur donne dans une liste chane ordonne
Dans cet exemple nous reprenons le cas de la liste chane contenant des lments de type chaine de
caractres, mais ce pourrait tre tout autre type, selon celui dtermin la cration de la liste
(rappelons que tous les lments d'une liste chane doivent avoir le mme type). La liste va tre
parcourue partir de son premier lment (celui point par le pointeur de tte). Il a deux cas
darrt :
avoir trouv la valeur de l'lment,
avoir atteint la fin de la liste.
L'algorithme est donn sous forme d'une procdure qui reoit la tte de liste en paramtre. La valeur
chercher est lue dans la procdure.
Chapitre 10
8 / 12
DVD-MIAGE
Listes chaines
Algorithmique
Procedure RechercherValeurListe
(Entre Tete : Liste, Val : variant)
/* Rechercher si une valeur donne en paramtre est prsente dans la liste passe en paramtre */
Variables locales
P
: Liste
/* pointeur de parcours de la liste */
Trouve
: boolen
/* indicateur de succs de la recherche */
DEBUT
SI Tete <> Nil ALORS
/* la liste n'est pas vide on peut donc y chercher une valeur */
P Tete
Trouve Faux
TANTQUE P <> Nil ET Non Trouve
SI P^.Info = Val ALORS
/* L'lment recherch est l'lment courant */
Trouve Vrai
SINON
/* L'lment courant n'est pas l'lment recherch */
P P^.Suivant
/* on passe l'lment suivant dans la liste */
FINSI
FIN TANT QUE
SI Trouve ALORS
Ecrire (" La valeur ", Val, " est dans la liste")
SINON
Ecrire (" La valeur ", Val, " n'est pas dans la liste")
FINSI
SINON
Ecrire("La liste est vide")
FINSI
FIN
@ :3
Ma
24
@ :24
premire
8
@:8
liste
56
@ : 56
chaine
Nil
Procedure SupprimerPremierElement
(Entre/Sortie Tete : Liste)
/* Supprime le premier lment de la liste dont le pointeur de tte est pass en paramtre */
Variables locales
P : Liste
/* pointeur sur l'lment supprimer */
DEBUT
SI Tete <> Nil ALORS
/* la liste n'est pas vide on peut donc supprimer le premier lment */
er
P Tete
/* P pointe sur le 1 lment de la liste */
Tete P^.Suivant
/* la tte de liste doit pointer sur le deuxime 'lment */
Desallouer(P)
/* libration de l'espace mmoire qu'occupait le premier lment */
SINON
Ecrire("La liste est vide")
FINSI
FIN
Chapitre 10
9 / 12
DVD-MIAGE
Listes chaines
Algorithmique
2.3.6. Supprimer d'une liste chane un lment portant une valeur donne
Il faut:
traiter part la suppression du premier lment car il faut modifier le pointeur de tte,
trouver l'adresse P de l'lment supprimer,
sauvegarder l'adresse Prec de l'lment prcdant l'lment point par P pour connatre
l'adresse de l'lment prcdant l'lment supprimer, puis faire pointer l'lment prcdent
sur l'lment suivant l'lment supprimer,
Librer l'espace mmoire occup par l'lment supprim.
L'exemple considre que l'on souhaite supprimer l'lment contenant la valeur "liste" de la liste cidessus.
Tete
3
Prec
24
@ :3
Ma
24
@ : 24
premire
56 8
Elment prcdant
celui supprimer
P
8
@ :8
liste
56
@ : 56
chane
Nil
Elment supprimer
Chapitre 10
10 / 12
DVD-MIAGE
Listes chaines
Algorithmique
Queue
5
@:4
3
14
2
@:2
4
10
5
@:5
2
24
Nil
A l'initialisation d'une liste doublement chane les pointeurs Tete et Queue contiennent la valeur
Nil.
Afficher les lments d'une liste doublement chane
Il est possible de parcourir la liste doublement chane du premier lment vers le dernier. Le
pointeur de parcours, P, est initialis avec l'adresse contenue dans Tete. Il prend les valeurs
successives des pointeurs Suivant de chaque lment de la liste. Le parcours s'arrte lorsque le
pointeur de parcours a la valeur Nil. Cet algorithme est analogue celui du parcours d'une liste
simplement chane.
Procedure AfficherListeAvant (Entre
Variables locales
P : ListeDC
DEBUT
P Tete /
TANT QUE P <> NIL FAIRE
Ecrire(P^.Info)
P P^.Suivant
FIN TANT QUE
FIN
Chapitre 10
Tete : ListeDC)
11 / 12
DVD-MIAGE
Listes chaines
Algorithmique
Il est possible de parcourir la liste doublement chane du dernier lment vers le premier. Le
pointeur de parcours, P, est initialis avec l'adresse contenue dans Queue. Il prend les valeurs
successives des pointeurs Precedent de chaque lment de la liste. Le parcours s'arrte lorsque
le pointeur de parcours a la valeur Nil.
Procedure AfficherListeArriere (Entre
Variables locales
P : ListeDC
DEBUT
P Queue
TANT QUE P <> NIL FAIRE
Ecrire(P^.Info)
P P^.Precedent
FIN TANT QUE
FIN
Queue : ListeDC)
@ :25
4
8
@ :8
10
56
@ :56
24
3
Puis l'exemple d'une liste doublement chane circulaire. : Le dernier lment pointe sur le premier,
et le premier lment pointe sur le dernier.
Tte
3
@ :3
56
12
25
Queue
56
@ : 25
3
14
8
@:8
25
10
56
@ :56
8
24
3
WEBOGRAPHIE
http://www.siteduzero.com/tutoriel-3-36245-les-listes-chainees.html
http://liris.cnrs.fr/pierre-antoine.champin/enseignement/algo/listes_chainees/
http://deptinfo.cnam.fr/Enseignement/CycleA/SD/cours/structuress%E9quentielleschain%E9es.pdf
http://pauillac.inria.fr/~maranget/X/421/poly/listes.html#toc2
http://wwwens.uqac.ca/~rebaine/8INF805/courslistespilesetfiles.pdf
Chapitre 10
12 / 12