Comment utiliser cette page

Cette page suit toujours le même plan : le vocabulaire, un exemple concret, l'implémentation en Python, une démonstration interactive, le code Python, puis la complexité.

Utilisation de la démonstration
La démonstration avance uniquement quand vous cliquez sur « Suivant » ou « Précédent » : rien ne bouge tout seul. Un bouton « Lecture automatique » est disponible si vous préférez laisser les étapes défiler seules, à une vitesse que vous choisissez.

1. Vocabulaire à connaître avant de commencer

Chaque mot ci-dessous est utilisé exactement dans ce sens dans toute la page.

MotDéfinition précise
PileUne structure linéaire dans laquelle on ajoute et on retire les éléments toujours du même côté, appelé le sommet.
LIFO« Last In, First Out », c'est-à-dire « dernier arrivé, premier sorti » : le principe de fonctionnement d'une pile. Le dernier élément ajouté est toujours le premier retiré.
EmpilerAjouter un élément sur le sommet de la pile.
DépilerRetirer et renvoyer l'élément qui est au sommet de la pile (c'est-à-dire le dernier ajouté).
Sommet de la pileL'élément le plus récent de la pile ; c'est celui qui sera retiré au prochain dépilement.
Pile videUne pile qui ne contient aucun élément ; on ne peut pas dépiler une pile vide.
Structure de données abstraiteUne structure définie par les opérations qu'on peut faire dessus (ici empiler et dépiler), sans imposer une seule façon de l'implémenter en mémoire.

2. L'exemple utilisé dans cette page

On utilise une pile de dossiers posés sur un bureau, un par-dessus l'autre. On empile le dossier d'Alice, puis celui de Bob, puis celui de Chloé, dans cet ordre : le dossier d'Alice se retrouve donc tout en bas de la pile, et celui de Chloé tout en haut. Le principe LIFO impose de toujours traiter en premier le dossier du dessus, c'est-à-dire le dernier posé.

Pile vs file
Une pile fonctionne en LIFO (dernier arrivé, premier sorti), comme une pile d'assiettes : on ne peut retirer que celle du dessus, qui est la dernière posée. Une file fonctionne différemment, en FIFO (premier arrivé, premier sorti), comme une file d'attente.

3. Implémentation d'une pile avec une liste Python

3.1 — Tableau des opérations

OpérationCode PythonEffet
Créer une pile videpile = []une liste vide
Empiler un élément (le poser sur le sommet)pile.append(x)x est ajouté à la fin de la liste
Dépiler un élément (le retirer du sommet, et le renvoyer)pile.pop()le dernier élément de la liste est retiré et renvoyé
Regarder le sommet sans le retirerpile[-1]le dernier élément, sans modifier la pile
Tester si la pile est videpile == []True ou False
Pourquoi pop() sans indice, et pas pop(0) ?
pile.pop(), sans indice, retire et renvoie le dernier élément ajouté à la liste, c'est-à-dire le sommet de la pile : c'est bien le comportement LIFO attendu. pile.pop(0) retirerait le premier élément ajouté, ce qui correspondrait au fonctionnement d'une file (FIFO), pas d'une pile.

4. Démonstration interactive

4.1 — Principe, en une phrase

Principe
On empile un dossier en le posant sur le sommet de la pile, et on dépile toujours le dossier qui est au sommet de la pile, quel que soit l'ordre dans lequel on effectue ces opérations.

4.2 — Les étapes, dans l'ordre exact

  1. On part d'une pile vide.
  2. Empiler le dossier d'Alice, puis celui de Bob, puis celui de Chloé : ils se posent sur le sommet, dans cet ordre.
  3. Dépiler une fois : on retire et on récupère le dossier de Chloé, qui est au sommet (le dernier posé).
  4. Empiler le dossier de David : il se pose sur le sommet, au-dessus de celui de Bob.
  5. Dépiler deux fois de suite : on retire et on récupère le dossier de David, puis celui de Bob.

4.3 — Trace pas à pas

élément qui vient d'être empilé élément au sommet, sur le point d'être dépilé
État de la pile (le sommet est en haut)
Étape 1 / 1
La ligne de code correspondant à l'étape en cours est surlignée ci-dessous.

4.4 — Code Python

pile = []pile.append("Alice")          # on empile le dossier d'Alicepile.append("Bob")            # on empile le dossier de Bobpile.append("Chloé")          # on empile le dossier de Chloédernier = pile.pop()          # on dépile : renvoie "Chloé"pile.append("David")          # on empile le dossier de Davidsuivant = pile.pop()          # on dépile : renvoie "David"encore = pile.pop()           # on dépile : renvoie "Bob"

5. Complexité des opérations sur une pile

6. Points clés à retenir

Prêt(e) pour la suite ? → Retour à l'accueil