Vous êtes sur la page 1sur 9

Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Chapitre 4
Structures squentielles
1- les listes

Introduction

Les structures de donnes en algorithmique sont souvent complexes et de taille


variable. Elles sont souvent aussi dynamiques, au sens o elles voluent, en forme et
en taille, en cours d'excution d'un programme. Les tableaux prsentent, dans cette
optique, un certain nombre de limitations qui en rendent parfois l'usage peu naturel.
Tout d'abord, un tableau est de taille fixe, dtermin sa cration. Il faut donc choisir
une taille suffisante ds le dbut, ce qui peut amener un gaspillage considrable de
place.
Un tableau a une structure fixe, linaire. Une modification de l'ordre, par exemple par
insertion d'un lment, oblige dplacer d'autres lments du tableau, ce qui peut tre
trs coteux. Un tableau est donc rigide, et peu conomique si l'ensemble des
lments qu'il contient est appel voluer en cours d'excution.
Dans ce chapitre et dans le chapitre suivant, nous introduisons quelques structures
dynamiques. Elles sont utilises de faon trs intensive en programmation. Leur but
est de grer un ensemble fini d'lments dont le nombre n'est pas fix a priori et peut
voluer.

Dfinition dune liste

Une liste est un ensemble ordonn et extensible dlments de mme type auxquels on
accde squentiellement et o lon peut ajouter ou retrancher un lment en nimporte
quelle position.
Cest donc une suite sur laquelle on peut effectuer une gamme trs large doprations
Une liste peut tre dcompose en deux parties : le dbut de la liste et la suite de la
liste.
On utilisera la structure enregistrement pour dfinir un type liste dlments de
type T de la faon suivante :

http://berrehouma.olympe-network.com
1
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

TYPE Liste = vide| Liste_non_vide


TYPE Lste_non_vide = Enregistrement
Tte : T
Suite : Liste
Fin enregistrement

Formellement L =< e0 , e1 ,.., en > o n est le nombre des lments dans la liste un
instant donn.
Soit E lensemble des lments, lensemble des listes donc = + E

Remarques
1- Lordre des lments dans une liste est fondamental.
2- Lordre est sur les places des lments, et pas sur les lments eux mmes
3- Les places sont totalement ordonnes cest dire quil existe une fonction de
succession succ telle que toute place est accessible en appliquant succ de
manire rpt partir de la premire place de la liste.

Donc pour toute place P dune liste non vide k 0 tq P = succ k (tte( L)) o tte(L)
indique la premire place de L.
4- chaque place un contenu qui est un lment.
5- Le nombre n dlment (des places) de L est appel la longueur de L ( si n=0,
elle ne contient aucun lment,, autrement dit , elle est vide)
6- Pour la nme place la fonction succ nest pas dfinie
7- Lalgorithme le plus utilis dans les liste est celui du parcours squentiel
dune liste

Cet algorithme parcoure dans lordre des places une liste non vide, pour appliquer le
mme traitement leurs contenus.

Algo Prcour (L :Liste)


Variable i :entier
P :place
Dbut
Ptte(L)
Traiter (contenu(L))
Pour i=1 longueur(L)-1 faire
P succ(P)
Triater(P)
Fin pour
Fin

http://berrehouma.olympe-network.com
2
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

En plus de traitement squentiel des lments , les oprations de base que lon peut
effectuer sur les listes sont les suivantes :

Vide : qui teste la vacuit


Accder : pour accder au kme lment
Supprimer : pour supprimer la kme lment
Insrer : pour insrer un nouveau lment la kme place.

3 TAD liste itrative

Sorte liste, place


Utilise
Entier, lment
Oprations
liste _ vide : liste
accs : liste, entier place
contenu : place lment
longueur : liste entier
sup primer : liste, entier liste
inserer : liste, entier , lment liste
succ : place place
me
i : liste, entier lment
Prcondition
accs( L, k ) est dfinie ssi 1 k longueur ( L)
sup primer ( L, k ) est dfinie ssi 1 k longueur ( L)
insrer ( L, k , e) est dfinie ssi 1 k longueur ( L) + 1
Axiomes
longueur (liste _ vide) = 0
( L liste _ vide 1 k longueur ( L)) longueur (sup primer ( L, k )) = longueur ( L) 1
1 k longueur ( L) + 1 longueur (insrer ( L, k , e)) = longueur ( L) + 1
me
i ( L, k ) = contenu (accs( L, k ))
me me
( L liste _ vide 1 k longueur ( L) 1 i k ) i (sup primer ( L, k ), i ) = i ( L, i )
me me
( L liste _ vide 1 k longueur ( L) k i longueur ( L) 1) i (sup primer ( L, k ), i ) = i ( L, i + 1)
me me
(1 k longueur ( L) + 1 1 i k ) i (insrer ( L, k , e), i ) = i ( L, i )
me
(1 k longueur ( L) + 1 i = k ) i (insrer ( L, k , e), i ) = e
me me
(1 k longueur ( L) + 1 k i longueur ( L) + 1) i (insrer ( L, k , e), i ) = i ( L, i 1)
L liste _ vide 1 k longueur ( L) succ(accs( L, k )) = accs( L, k + 1)

http://berrehouma.olympe-network.com
3
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

4 TAD liste rcursive

Sorte liste, place


Utilise
Entier, lment
Oprations
liste _ vide liste
tte : liste place
fin : liste liste
cons : lment, liste liste
premier : liste lment
contenu : place lment
succ : place place
Prcondition
tte( L)

fin( L) sont dfinies ssi L liste _ vide
premier ( L)
Axiomes
L liste _ vide premier ( L) = contenu (tte( L))
fin(cons(e, L)) = L
premier (cons(e, L)) = e
L liste _ vide succ(tte( L)) = tte( fin( L))

Exercice
Donner la signature de lopration concatner de deux listes ainsi que les axiomes.

Solution
a- concat : liste, liste liste
b-
longeur (concat ( L1 , L 2 ) = longueur (L1 ) + longueur ( L 2 )
me me
1 i longueur (L1 ) i (concat (L1 , L 2 ), i ) = i (L1 , i )
me me
longueur (L1 ) + 1 i longueur (L1 ) + longueur (L 2 ) i (concat ( L1 , L 2 ), i ) = i (L 2 , i longueur (L1 ))
concat (liste _ vide , L ) = L
concat (cons (e , L )), L ') = cns (e , concat (L , L '))

http://berrehouma.olympe-network.com
4
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

5 Reprsentation des listes


5.A Reprsentation contigu
La liste est reprsente par un tableau dont la ime case est la ime place de la liste
La longueur maximale de la liste = la taille du tableau
Si on connat davance la longueur de la liste, on rserve la taille du tableau = la
longueur de la liste pour prendre en compte tous les lment du tableau.
La liste est reprsente par un couple (Tableau, Entier ) comme suit

TYPE Liste = Enregistrement


T : Tableau [1..lmax]
longueur : Entier
Fin enregistrement

e1 e2 . en n

T longueur

Soit L une variable de type liste (L :Liste)


o Si L est vide alors L.longueur =0
o Lexpression L.T[i] cest laccs la ime lment de la liste
o Succ cest la succession de la case du tableau dans la mmoire.
o Linsertion de kme place implique le dcalage de tous les lments partir
de k

Exercice
Ecrire lalgorithme supprimer qui supprime le kme lment de la liste L.
Solution

Algo supprimer (var L :Liste, k :1..lmax)


Variable n :1..lmax
i :1..lmax
Dbut
nL.longueur

si k n alors
pour i = k n-1 faire

L.T[i]L.T[i+1]
Fin pour
L.longueur n-1
finsi
Fin

http://berrehouma.olympe-network.com
5
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Exercice
Ecrire lalgorithme inserer qui insre un lment x dans la kme place de la liste L
Solution

Algo supprimer (var L :Liste, x :lment, k :1..lmax)


Variable n :1..lmax
i:1..lmax
Dbut
n L.longueur
si k n+1 alors
pour i = n k pas= -1 faire

L.T[i+1]L.T[i]

Fin pour
L.T[k]x
L.longueur n+1
finsi
Fin

5.B Reprsentation chane

Un lment dune liste est un couple dune information et dune adresse


Ce couple est appel cellule
Une cellule est reconnue par son adresse

cellule

adresse de la cellule

information adresse

http://berrehouma.olympe-network.com
6
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

5.B.1 Pointeurs
une variable qui prend pour valeur une adresse est appele une variable de type
pointeur ou simplement pointeur.

p :pointeur
a

un pointeur p sur un type T est dclar comme suite

p :^T

Exemple

p1 :^entier ;
p2 :^entier
a,b :entier ;
nouveau(p1) ;
nouveau(p2) ;

p1 p2

p1 ^ a ;
p2 ^ b ;

p1 p2
a b

http://berrehouma.olympe-network.com
7
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

p1p2

p1 p2
a b

p1nil

p1 p2
a b

librer(p2) ;

p1 p2
a

Remarque/ pour plus de dtail sur les pointeurs consultez le TP n 5 sur


http://berrehouma.olympe-network.com/tp/tp5.pdf

Les pointeurs sont utiliss pour chaner entre eux les lments successifs dune liste
la liste est dtermine par ladresse de son premier lment
une liste est reprsente par

TYPE Cellule = Enregistrement


val : lment
lien : ^Cellule
Fin enregistrement
Liste : ^Cellule

http://berrehouma.olympe-network.com
8
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Exemple
Soit L une liste chane contenant les quatre lments suivants : e1,e2,e3,e4

e1

e2

e3

e4

Liste vide L nil

L
si L liste_vide alors L contient ladresse du 1er lment (1re cellule ), dans
lexemple prcdents L contient ladresse de e1.
L reprsente tte(L)
L^.lien reprsente fin(L)
si une place est reprsente par le pointeur P alors succ(P) est reprsente par
P^.lien
Exercice
soit la reprsentation de deux listes chanes comme suite :
0 6
1 B 4
Liste chane 2 0
1 3 D 9
4 A 3
5 B -1
7 6 8
7 2
Liste libre 8 11
9 A 5
10 -1
11 10
12

1. donner les structures des donnes convenables


2. crire les algorithmes ime, longueur, supprimer et insrer.

http://berrehouma.olympe-network.com
9