Vous êtes sur la page 1sur 9

Cours

Algorithmique et Analyse :
Structures linaires (suite)
Mathieu Roche
Jrme Az
Fond sur le polycopi de J.P Chevillard
2003 - 2004
Universit Paris-Sud

Filire : C4 - DU

2. Les piles

Une PILE est un cas particulier de liste pour laquelle on naccde qu


un seul lment : le dernier, do lappellation LIFO (Last In, First Out).

TailleMax

TYPE
ty_structure_de_pile = agrgat_de

p_top

t_pile : tableau de ty_lment_de_pile


indic [1..TailleMax];
p_top :

Remarque : p_top 1

indice de t_pile

/* indice du premier lment vide de la pile */


Fin_agrgat ty_structure_de_pile;
VARIABLE
pile : ty_structure_de_pile

Accder au premier lment vide de la pile :


t_pile[p_top](pile) (attention !! notation diffrente du poly)
Cours Algo - C4-DU

2. Les piles
Deux procdures importantes relatives aux piles :
- empiler (PUSH) : stocker une valeur au sommet de la pile
- dpiler (POP) : rcuprer la valeur de lobjet qui est au
sommet de la pile et libre sa place

Empiler (PUSH)

Procdure Empiler (
pile :ty_structure_de_pile, Entre/Sortie;
x : ty_lment_de_pile, Entre; /* valeur empiler */
OK : indicateur boolen, Sortie

/* si OK = vrai, lopration sest bien droule */


Cours Algo - C4-DU

2. Les piles

Dpiler (POP)

Procdure Dpiler (
pile :ty_structure_de_pile, Entre/Sortie;
y : ty_lment_de_pile, Sortie; /* valeur dpile */
OK : indicateur boolen, Sortie

/* range dans y la valeur du sommet de la pile, libre le sommet, si OK = vrai,


lopration sest bien droule */

Initialiser Pile
Procdure Init_Pile ( pile :ty_structure_de_pile,
Entre/Sortie )
Cours Algo - C4-DU

3. Les files

Une FILE est un autre cas particulier de liste pour laquelle on ne peut
ajouter de nouvel lment qu la fin de la file et on ne peut extraire un
lment quen tte. Do lappellation FIFO (First In, First Out)
1
TailleMax

p_tte

p_queue

TYPE
ty_structure_de_file = agrgat_de
t_file : tableau de ty_lment_de_file indic [1..TailleMax];
p_tte :
p_queue :

indice de t_file /* indice du premier lment sortir */


indice de t_file /* indice de la premire place libre */

Fin_agrgat ty_structure_de_file;
VARIABLE
file : ty_structure_de_file

Accder la tte de la file : t_file[p_tte](file)


(attention !! notation diffrente du poly)

Cours Algo - C4-DU

3. Les files

Lorsque aprs une incrmentation de lindice du tableau celui-ci


dsigne un indice au-del de la fin du tableau, on donne lindice du
dbut du tableau. La fonction suivant effectue une telle tche :

p_queue

p_tte

Fonction Suivant ( p : indice de t_file, Entre ) :


indice de llment suivant de t_file
si p < TailleMax alors
retourner(p+1);
sinon
retourner(1);
fin_si
Fin_fonction

Cours Algo - C4-DU

3. Les files

Remarque :

si nous ajoutons un lment de la file presque pleine, elle


devient pleine et on a : p_queue = p_tte

p_queue p_tte

si nous retirons un lment de la file presque vide, elle


devient vide et on a aussi : p_tte = p_queue

p_tte p_queue

Conclusion : il nest pas possible de dtecter ltat vide et


ltat plein avec le mme test : si (p_queue =
p_tte) alors
Cours Algo - C4-DU

3. Les files

Solution propose :
Chaque procdure qui modifie la file tient jour une variable
indiquant ltat_de_la_file : vide, pleine ou normale (c.-d. ni
vide ni pleine).
Ajouter cette variable lagrgat :
TYPE
ty_structure_de_file = agrgat_de
t_file : tableau de ty_lment_de_file indic [1..TailleMax];
p_tte :
p_queue :

indice de t_file /* indice du premier lment sortir */


indice de t_file /* indice de la premire place libre */

tat_de_la_file : indicateur 3 tats

(vide, pleine, normale)

Fin_agrgat ty_structure_de_file;

Cours Algo - C4-DU

3. Les files

Ajouter

Procdure Ajouter (file: ty_structure_de_file, Entre/Sortie;


x : ty_lment_de_file, Entre;
OK : indicateur boolen, Sortie )
/* si OK = vrai, lopration sest bien droule */

Retirer

Procdure Retirer (file: ty_structure_de_file, Entre/Sortie;


y : ty_lment_de_file, Sortie;
OK : indicateur boolen, Sortie

/* si OK = vrai, lopration sest bien droule */

Initialiser File

Procdure Init_File (file:ty_structure_de_file, Entre/Sortie)


Cours Algo - C4-DU