Vous êtes sur la page 1sur 7

L1 Informatique Universit Paris 8 - 2010-2011

Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Cours 9 -

Les listes chanes


1. Dfinition
Une liste est un ensemble dobjets de mme type constituant les lments de la liste.
Les lments sont chans entre eux et on peut facilement ajouter ou extraire un ou
plusieurs lments.
Une liste est une structure de donnes telle que chaque lment contient :
- des informations sur lobjet
- un pointeur sur un autre lment de la liste, ou un pointeur NULL sil ny a
pas dlment suivant.
2. Reprsentation en mmoire dune liste

Voici en exemple la reprsentation en mmoire de la liste des patients selon leur


ordre darrive dans une salle dattente chez le mdecin.
@500
Dupond

@10
12 :20

@10

Duroc

@200
0
12 :32

@200

Dufour

13 :05

NULL

En allocation dynamique, les emplacements mmoires sont disperss en mmoire


centrale. Lespace est rserv au fur et mesure des crations des lments de la
liste. La seule limite tant la taille de la mmoire centrale.
Il existe diffrents type de listes chaines :
-

Les listes simplement chaines (comme ci-dessus)

Les listes doublement chaines

Les listes circulaires

Les piles

Les files

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Cours 9 -

3. Aperu des diffrentes formes de chaines


3.1.

Une liste simplement chaine

3.2.

Une liste doublement chaine

3.3.

Une liste circulaire

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

3.4.

- Cours 9 -

Une pile

La pile est une structure de donnes, qui permet de stocker les donnes dans lordre LIFO (Last
In First Out = Dernier Entr Premier Sorti). Linsertion des donnes se fait donc toujours au
dbut de la liste (i.e. par le haut de la pile), donc le premier lment de la liste est le dernier
lment insr, sa position est donc en haut de la pile.
Dernier entr

Premier sorti

Pour permettre les oprations sur la pile, nous allons sauvegarder certains lments Le premier
lment de la pile, qui se trouve en haut de la pile, va nous permettre de raliser l'opration de
rcupration des donnes situes en haut de la pile.
Pour raliser cela, une autre structure sera utilise (ce n'est pas obligatoire, des variables peuvent
tre utilises). Voici sa composition :
typedef struct pile {
Element *debut;
int taille;
};
typefed struct pile Pile ;

Le pointeur dbut contiendra l'adresse du premier lment de la liste.


La variable taille contient le nombre d'lments.
3.5.

Une file

La File diffre de la Pile dans sa faon de grer les donnes. En effet, la file permet de stocker les
donnes dans lordre FIFO (First In First Out = Premier Entr Premier Sorti). Linsertion des
donnes se fait aussi par en haut de la File, mais la sortie ne se faut plus par le haut comme pour
la Pile mais par le bas.

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

Premier entr

- Cours 9 -

Premier sorti

Pour manipuler une File, nous sauvegardons son premier lment, son dernier lment ainsi que
sa taille (nombre dlments quelle contient).
Pour raliser cela, une autre structure sera utilise (ce n'est pas obligatoire, des variables peuvent
tre utilises). Voici sa composition :
typedef struct file{
Element *debut;
Element *fin;
int taille;
};
typefed struct file File ;

Le pointeur dbut contiendra l'adresse du premier lment de la liste.


Le pointeur fin contiendra l'adresse du dernier lment de la liste.
La variable taille contient le nombre d'lments.

Dans la suite du chapitre nous ne traiterons que le cas dune liste simplement chaine.
4. Dclaration dune liste simplement chaine
Dans lexemple de la liste des patients, nous auront les dclarations suivantes :
typdef char ch15 [16] ;
typedef element * PElement;
typedef struct element {
ch15 Nom;
int age;
PElement * Suivant;
} Element;

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Cours 9 -

typedef struct Liste {


PElement Premier;
PElement Dernier;
PElement Courant; /* facultatif */
int taille ;
};

Le pointeur Courant ici permet de se dplacer dans la liste, mais il nest pas ncessaire, une
variable du mme type pourra jouer ce rle.
5. Initialisation dune liste
/* Liste vide */
Liste L;
L->Premier = NULL;
L->Dernier = NULL;
L->taille = 0 ;

Pour savoir si une liste est vide, il suffit de vrifier si son premier lment vaut NULL.
6. Insrer un lment dans une liste vide
tapes :

allocation de la mmoire pour le nouvel lment


remplir le champ de donnes du nouvel lment
le pointeur suivant du nouvel lment pointera vers NULL (vu que l'insertion est faite
dans une liste vide on utilise l'adresse du pointeur dbut qui vaut NULL)
les pointeurs dbut et fin pointeront vers le nouvel lment
la taille est mise jour

Nous insrons par exemple llment suivant :


Element patient = { Dupond , 45, NULL } ;

Ci-dessous le script qui ralise ces tapes dinsertion :


/* insertion dans une liste vide */
Element * nouveauElement ;
if ( (nouveauElement = (Element *) malloc (sizeof (Element))) == NULL )
return -1;
if ((nouveauElement->nom = (char *) malloc (16 * sizeof (char)))== NULL)
return -1;
if ((nouveauElement->age = (int *) malloc (sizeof (int)))== NULL)
return -1;
nouveauElement->nom = patient.nom ;
nouveauElement->age = patient.age ;
nouveauElement->suivant = patient.suivant ; /* NULL */
L->Premier = nouveauElement;
L->Dernier = nouveauElement;
L->taille++ ;

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

premier

Dupond

- Cours 9 -

dernier

45

NULL

Le pointeur courant L->Courant va nous permettre de parcourir la liste ainsi dfinie.


7. Insertions dlments dans une liste non vide
A chaque nouvelle insertion dun lment, il faut allouer de lespace mmoire pour ce dernier
avant de linsrer dans la liste.
-

En tte de liste :
premier

Machin

Dupond

suivant

34

suivant

45

dernier

Duroc

Dufour

suivant

30

15

NULL

Les flches rouges indiquent les pointeurs modifier pour insrer un lment en tte
de liste.
-

Dans la liste :
L

Dupond

45

premier

suivant

Duroc

dernier

30

Dufour

suivant

Machin

34

15

NULL

suivant

Les flches rouges indiquent ici lensemble des pointeurs modifier pour insrer un
lment dans la liste.

L1 Informatique Universit Paris 8 - 2010-2011


Programmation Imprative I
Rim Chaabane rchaabane@ai.univ-paris8.fr

- Cours 9 -

En fin de liste :
premier

dernier

Machin

Dupond

45

suivant

Duroc

30

suivant

Dufour

34

NULL

suivant

15

Les flches rouges indiquent ici aussi les pointeurs modifier pour pouvoir insrer
un lment la fin de la liste.