Vous êtes sur la page 1sur 7

Université de Manouba

Ecole supérieure d’économie numérique ESEN

Algorithmique et structures de
données II
(Cours 5)

La Pile et la File

Réalisé par: Dhouha Maatar 1

1. Présentation des Piles


1.1. Définition:
Une pile est une suite de cellules allouées dynamiquement (liste) où
l’insertion et la suppression d’un élément se font toujours en
tête de liste, par exemple une pile d’assiettes.

Avec les Piles, on autorise seulement 4 opérations:

 Consulter le dernier élément de la pile


 Tester si la pile est vide
 Empiler un élément, le mettre au sommet de la pile (PUSH)
 Dépiler un élément par le sommet (POP)

1
1. Présentation des Piles

Toutes les opérations sont effectuées sur la même


extrémités: on parle de structure en LIFO (LAST IN
FIRST OUT: dernier arrivé, premier sorti)
in
out

Figure 1: Structure d’une PILE 3

1. Présentation des Piles


1.2. Déclaration:
L’utilisation de la pile s’impose lorsqu’on mémorise des
informations qui devront être traitées dans l’ordre inverse de leur
arrivée.

En supposant que les éléments de la pile sont des entiers, celles-ci se


déclare de la façon suivante:

Types cellule =enregistrement


donnee: entier //valeur à stocker
suivant: ^ cellule
Fin enregistrement
Pile= ^ cellule
Variables P: Pile 4

2
2. Manipulation d’une Pile
Pour cela, on peut utiliser les procédures et les fonctions suivantes ayant pour tâches:
2.1. Création d’une Pile vide:
Procédure Créer_Pile(Var P:Pile)
Début
P←Nil
Fin
2.2. Vérification si la pile P est vide:
Fonction Pile_Vide(P:Pile): booléen
Début
retourner (P=Nil) //renvoie vrai si P est NIL
Fin
2.3. Accéder au sommet de la pile P:
Fonction Accès_Sommet(P:Pile): entier
Début
retourner (P^.donnee)
Fin 5

2. Manipulation d’une Pile

2.4. Ajouter un élément X au sommet de la Pile:

Procédure Empiler(X: entier, var P:Pile)


Variable
O: ^ cellule
Début
Allouer (O)
O ^. donnee ←X
O ^. suivant←P //(si la liste est vide p= nil sinon p pointe sur le sommet)
P←O
Fin

3
2. Manipulation d’une Pile
2.5. Supprimer un élément de la Pile:
Procédure Dépiler (var P:Pile) Fonction Dépiler ( P:Pile): entier
Variable Variable
O: ^ cellule O: ^ cellule
Début X: entier
si ( non Pile_Vide(P)) alors Début
O←P si ( non Pile_Vide(P)) alors
P←P ^.suivant X ← P ^.donnee
libérer (O) O←P
sinon P←P ^.suivant
écrire (‘’ Pile vide ‘’) libérer (O)
finsi retourner (X)
Fin Finsi
Fin
7

3. Application sur pile


En considérant les primitives qui permettent de manipuler une pile, écrire une
fonction qui permet de comparer 2 piles si elles sont égales ou non:

Fonction Comparer ( P1, P2: Pile) : booleen


Début
Tant que ( non Pile_Vide(P1) et non Pile_Vide(P2) ) faire
si ( Accés_sommet (P1) < > Accés_sommet (P2) )alors
retourner (faux)
sinon
Dépiler (P1)
Dépiler (p2)
finsi
FinTantque
Si( Pile_Vide(P1) et Pile_Vide(P2) ) alors
retourner (vrai)
sinon
retourner (faux)
8
Finsi
Fin

4
4. Présentation des Files
4.1. Définition:
Une File est une structure de données dynamique dans laquelle
on insert de nouveaux éléments à la fin (queue) et où on enlève
des éléments au début (tête de file). On parle de mode FIFO
(First In First Out).
Par exemple, la file d’attente des clients devant un guichet. On
retrouve également les files d’attentes dans les programmes de
traitement de transactions telle que les réservations d’avions.

in out
Figure 2: Structure d’une FILE
9

4. Présentation des Files


4.2. Déclaration:
En supposant que les éléments de la File sont des entiers, celles-ci se
déclare de la façon suivante:
Types
cellule =enregistrement
donnee: entier //valeur à stocker
suivant: ^ cellule
Fin cellule

File = enregistrement
tete: ^ cellule
queue: ^ cellule
Fin File

Variables F: File 10

5
5. Manipulation d’une File
Pour cette manipulation, on peut utiliser les modules suivants ayant pour tâches:
5.1. Création d’une File vide:
Procédure créer_File (var F:File)
Début
F. tete←Nil
F. queue←Nil
Fin
5.2. Test si la File est vide:
Fonction File_vide ( F:File): booleen
Début
retourner (F. tete = Nil)
Fin
5.3. Accès à la tête de la File:
Fonction Accès_Tête ( F:File): entier
Début
retourner (F. tete ^. donnee) 11
Fin

5. Manipulation d’une File

5.4. Ajouter l’élément X à la fin de la file:


Procédure enfiler (X: entier, var F:File)
Variable
nv: ^ cellule //Dans le cas où la file est
Début vide, comme la queue, la
allouer (nv) tête de la file doit pointer
nv^. donnee ←X sur le nouvel élément.//
nv ^. suivant ←NIL
si (F . queue <> NIL) alors
F . queue ^. suivant ←nv
sinon
F . tete←nv
finsi
F . queue ←nv
Fin 12

6
5. Manipulation d’une File
5.5. Extraction du sommet de la file:

Procédure defiler ( var F:File) Fonction defiler ( F:File) :entier


Variable Variable
q: ^cellule q: ^cellule
Début X : entier
si (F . tete = NIL) alors Début
ecrire (« file vide ») si (F . tete < > NIL) alors
sinon q← F . tete
q← F . tete X← F . tete ^. donnee
F . tete ← F. tete ^.suivant F . tete ← F. tete ^. suivant
Libérer(q) Libérer(q)
finsi retourner (X)
Fin Finsi
Fin
13

6. Application sur file


En considérant les primitives qui permettent de manipuler une file, écrire une
procédure qui permet d’inverser les éléments d’une file:

Procédure inverser _file ( var F: File)


Variable
P: pile
Début
créer_pile (P)
Tant que ( non File_Vide (F) ) faire
Empiler (P, Accés_tete (F))
Défiler (F)
FinTantque
Tant que ( non Pile_Vide (P) ) faire
Enfiler (F, Accés_sommet (P))
Dépiler (P)
FinTantque
Fin
14

Vous aimerez peut-être aussi