Comment utiliser cette page

Cette page ne présente pas une nouvelle structure : elle compare les trois structures déjà vues dans les fiches listes, piles et files. Elle est utile en fin de révision, pour vérifier qu'on ne les confond pas.

Principe, en une phrase
Une liste est une suite ordonnée dont on peut lire ou modifier n'importe quel élément par son indice ; une pile n'autorise l'ajout et le retrait que d'un seul côté, en LIFO (dernier arrivé, premier sorti) ; une file impose que le premier élément ajouté soit toujours le premier retiré, en FIFO (premier arrivé, premier sorti).

1. Vocabulaire commun, rappelé rapidement

MotDéfinition précise
IndiceLe numéro qui repère un élément dans une liste, à partir de 0. Concept propre aux listes : une pile ou une file n'a pas d'indices, seulement un sommet ou une tête/queue.
LIFO« Dernier arrivé, premier sorti » : le principe de fonctionnement d'une pile.
FIFO« Premier arrivé, premier sorti » : le principe de fonctionnement d'une file.
Empiler / DépilerAjouter / retirer un élément au sommet d'une pile.
Enfiler / DéfilerAjouter un élément à la queue d'une file / retirer l'élément qui est à sa tête.
Structure de données abstraiteUne structure définie par les opérations qu'on peut faire dessus, sans imposer une seule façon de l'implémenter en mémoire. Une pile et une file sont deux structures abstraites différentes, même quand elles sont toutes les deux implémentées avec une liste Python.

2. Tableau de comparaison générale

CritèreListePile (LIFO)File (FIFO)
Règle d'accèsn'importe quel élément, par son indiceseulement le sommetseulement la tête (pour retirer), la queue (pour ajouter)
Où on ajouten'importe où (indice choisi)au sommetà la queue (à la fin)
Où on retiren'importe où (indice choisi)au sommetà la tête (au début)
Exemple physiqueun tableau de cases numérotéesune pile d'assiettesune file d'attente
Ajouter, en Pythonl.insert(i, x) ou l.append(x)pile.append(x)file.append(x)
Retirer, en Pythonl.pop(i) ou l.remove(x)pile.pop()file.pop(0)

3. Le même scénario, appliqué à une pile et à une file

On applique exactement la même suite d'opérations à une pile et à une file, en partant à chaque fois d'une structure vide : ajouter Alice, Bob, puis Chloé ; retirer un élément ; ajouter David ; retirer deux éléments.

ÉtapeOpérationÉtat de la pile (LIFO)État de la file (FIFO)
0départ[][]
1ajouter Alice[Alice][Alice]
2ajouter Bob[Alice, Bob][Alice, Bob]
3ajouter Chloé[Alice, Bob, Chloé][Alice, Bob, Chloé]
4retirer un élémentdépiler → Chloé ; reste [Alice, Bob]défiler → Alice ; reste [Bob, Chloé]
5ajouter David[Alice, Bob, David][Bob, Chloé, David]
6retirer un élémentdépiler → David ; reste [Alice, Bob]défiler → Bob ; reste [Chloé, David]
7retirer un élémentdépiler → Bob ; reste [Alice]défiler → Chloé ; reste [David]
Résultat final de la pile
[Alice]
Résultat final de la file
[David]
La même suite d'opérations, deux résultats différents
Avec exactement les mêmes opérations, la pile et la file ne conservent pas la même personne : la pile conserve Alice, la toute première arrivée, car les derniers arrivés sont toujours retirés en premier (LIFO). La file conserve David, le tout dernier arrivé, car les premiers arrivés ont déjà tous été retirés (FIFO). C'est cette différence qu'il faut savoir expliquer à l'écrit.

4. Code Python comparé

Pile (LIFO)

pile = []pile.append(x)   # empilerpile.pop()       # dépiler                 # (retire le dernier)

File (FIFO)

file = []file.append(x)   # enfilerfile.pop(0)      # défiler                 # (retire le premier)

Dans les deux cas, on part de la même méthode append(x) pour ajouter un élément : c'est le choix de la méthode utilisée pour retirer un élément (pop() ou pop(0)) qui distingue une pile d'une file.

5. Quelle structure choisir face à un exercice ?

  1. Si l'énoncé demande d'accéder à un élément n'importe où, par sa position : c'est une liste.
  2. Si l'énoncé impose que le dernier élément traité soit le premier ressorti (annuler une action, appels de fonctions récursives, vérifier des parenthèses) : c'est une pile (LIFO).
  3. Si l'énoncé impose que les éléments soient traités exactement dans leur ordre d'arrivée (file d'attente, tâches à exécuter dans l'ordre) : c'est une file (FIFO).
  4. Dans tous les cas, une pile ou une file s'implémente en pratique avec une liste Python : ce qui change, ce n'est pas la structure de données utilisée en mémoire, mais les seules opérations qu'on s'autorise à utiliser dessus.

6. Complexité récapitulative

OpérationListe (position quelconque)Pile (au sommet)File (à la tête, avec une liste)
AjouterO(n), sauf à la fin : O(1)O(1)O(1) (l'ajout se fait toujours à la fin)
RetirerO(n), sauf à la fin : O(1)O(1)O(n) à cause du décalage ; O(1) avec collections.deque
Accéder à un élément précisO(1), par indiceseulement le sommet, O(1)seulement la tête, O(1)
Rechercher une valeurO(n)non prévu par cette structurenon prévu par cette structure

7. Points clés à retenir

Revoir une fiche en détail ? → Listes · Piles · Files · Retour à l'accueil