Académique Documents
Professionnel Documents
Culture Documents
Niveau: 1A
Equipe ALGO
Année universitaire:
2023/2024
1
Objectifs Spécifiques
⮚ Introduction
⮚ Définition et déclaration des piles
⮚ Manipulation d’une pile
⮚ Définition et déclaration des files
⮚ Manipulation d’une file
2
Introduction
• Les notions de pile et de file sont deux stratégies de manipulation des structures de
données regroupant un ensemble de données tel que les tableaux et les listes chaînées.
• Les piles et les files ne sont pas de nouveaux types de données mais plutôt une
manière de gérer un ensemble de données.
• Elles sont très souvent utiles et servent, entre autres, à mémoriser des évènements en
attente de traitement.
2
PARTIE I
Les piles
Motivation
Les listes simplement chaînées (LS) sont des structures de données qui:
- n'exigent pas une contiguïté des éléments à stocker en mémoire.
- organisent une série de données en mémoire en les liant entre elles à l'aide de pointeurs.
⇨La représentation chaînée des listes est coûteuse par les parcours!
⇨Pensons à éviter ce parcours?!
Motivation
Exemple 1:
Afin de gérer une pile d’assiettes, il faut suivre les règles suivantes:
1. Toute nouvelle assiette est ajoutée en haut de la pile.
2. Le retrait d’une assiette fournit celle qui a été posée en dernier.
3. Le dernier élément posé sur la pile est le premier à en sortir.
2
Motivation
Exemple 2:
Imaginez que vous avez un ensemble de livres entassés l’un sur l’autre, pour pouvoir retirer un
livre il faut retirer tous les livres qui sont entassés en dessus!
• Une pile est une variante un peu particulière des listes simplement chaînées.
• Une pile (stack) est une liste dans laquelle l'insertion ou la suppression d'un
élément s'effectue toujours à partir de la même extrémité de la liste,
appelée début ou tête ou sommet de la pile.
Syntaxe
Type
<nom_element> = Enregistrement
<champ_1>: <type_1>
…
<suivant_pointeur> :* <nom_ element >
FinEnregistrement
Type
Element = Enregistrement
P
val: entier 9
suivant :* Element
FinEnregistrement 25
10
Pile = * Element
Var
P: Pile
Opérations de base
2. Accès au sommet
Une pile est représentée par son sommet, qui est l'adresse de son premier
élément.
La pile pointe toujours vers son premier élément : l’élément le plus accessible.
Fonction Consulter_sommet( P : Pile): entier
Début
Si (Non(Pile_Vide_V2(P)))alors
Consulter_sommet ← *P.val
Sinon
écrire(‘la pile est vide!’)
Consulter_sommet ← -1
Finsi
Fin
⇨ La représentation chaînée des listes était coûteuse par les parcours mais dans le cas
des piles, on ne fait pas de parcours, on n’accède qu’au sommet.
Empiler: Ajouter un élément au Sommet de la pile
L’ajout d’une valeur à une pile revient à une insertion au début de la liste si on considère que le
sommet est la tête de la liste.
2. Mise à jour du champ val et du champ suivant (chaînage avec l’ancien sommet) du
nouvel élément.
L’ajout d’une valeur à une pile revient à une insertion en début de liste si l’on considère
que le sommet est la tête de la liste.
La suppression d’une valeur dans une pile (non vide) revient à effectuer une suppression d’un élément (le
premier élément de la liste) et à retourner la donnée enregistrée dans X.
⇨ Peut-on identifier la fin de la liste dans sa définition sans avoir besoin de chercher le dernier
à chaque fois ?!!
Exemple:
Une file est une structure de données basée sur le principe «Premier entré, premier sorti».
Une file est une structure où les insertions se font en queue et les suppressions en tête.
Les seuls éléments accessibles dans une file sont le premier élément pour la récupération qui est la
tête et le dernier élément pour l’ajout qui est la queue.
Une file est une liste chaînée définie par sa Tête et son Queue.
<nom_File> = Enregistrement
<nom_Tete> : *<nom_element>
<nom_Queue> : *<nom_element>
FinEnregistrement
Déclaration
Exemple F.Tete F.Queue
Type
Element = Enregistrement
val: entier
suivant : *Element
FinEnregistrement
5 15 9 20
File = Enregistrement
Tete : *Element
Queue : *Element F
FinEnregistrement
Var
F: File
Manipulation d’une file
Du point de vue manipulation des files, les contraintes d’accès sont matérialisées par les
procédures et les fonctions suivantes :
Fin
Consulter Tête
L'opération d’ajout d’un élément à une file est une insertion en queue dans une LS.
Étapes :
a. Si la file est vide, le pointeur Tete et le pointeur Queue pointent vers le nouvel élément
b. Sinon, le dernier élément va pointer vers le nouvel élément et mise à jour du pointeur Queue
Enfiler: ajouter un élément à une file
Fonction Enfiler( F : File , X : Entier) : File
Variable nouv : *Element
Début
nouv ← Allouer(taille(Element))
(*nouv) .Val ← X
(*nouv) .Suivant ← NULL
Si (File_vide(F)) Alors // si la file est vide
F.Tete ← nouv
Sinon
*(F.Queue).Suivant← nouv
Fin Si
F.Queue ← nouv
Enfiler ← F
Fin
Défiler : retirer un élément de la file
L'opération de suppression d’un élément d’une file est une suppression en tête dans une LS.
Il s’agit de supprimer le premier de la liste et retourner la donnée supprimée.
Étapes :
1. Tester si la file est vide : un message d’erreur sera affiché