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
FileUne structure linéaire dans laquelle on ajoute les éléments d'un côté (la queue) et on les retire de l'autre côté (la tête).
FIFO« First In, First Out », c'est-à-dire « premier arrivé, premier sorti » : le principe de fonctionnement d'une file. Le premier élément ajouté est toujours le premier retiré.
EnfilerAjouter un élément à la queue de la file (c'est-à-dire à la fin).
DéfilerRetirer et renvoyer l'élément qui est à la tête de la file (c'est-à-dire le plus ancien).
Tête de fileL'élément le plus ancien de la file ; c'est celui qui sera retiré au prochain défilement.
Queue de la fileL'endroit où on ajoute les nouveaux éléments (ce n'est pas un élément, mais une position).
File videUne file qui ne contient aucun élément ; on ne peut pas défiler une file vide.
Structure de données abstraiteUne structure définie par les opérations qu'on peut faire dessus (ici enfiler et défiler), sans imposer une seule façon de l'implémenter en mémoire.

2. L'exemple utilisé dans cette page

On utilise une file d'attente à la caisse d'un magasin. Les clients arrivent dans cet ordre : Alice, puis Bob, puis Chloé. Le principe FIFO garantit qu'ils seront servis exactement dans cet ordre : Alice d'abord, car elle est arrivée en premier.

File vs pile
Une file fonctionne en FIFO (premier arrivé, premier sorti), comme une file d'attente. Une pile fonctionne différemment, 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.

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

3.1 — Tableau des opérations

OpérationCode PythonEffet
Créer une file videfile = []une liste vide
Enfiler un élément (l'ajouter à la queue)file.append(x)x est ajouté à la fin de la liste
Défiler un élément (le retirer de la tête, et le renvoyer)file.pop(0)le premier élément de la liste est retiré et renvoyé
Regarder la tête sans la retirerfile[0]le premier élément, sans modifier la file
Tester si la file est videfile == []True ou False
Pourquoi pop(0) et pas pop() ?
file.pop(), sans indice, retire et renvoie le dernier élément de la liste : c'est le comportement d'une pile (LIFO), pas d'une file. Pour respecter le principe FIFO d'une file, il faut retirer le premier élément, donc écrire file.pop(0).

4. Démonstration interactive

4.1 — Principe, en une phrase

Principe
On enfile un client en l'ajoutant à la queue de la file (à droite), et on défile toujours le client qui est à la tête de la file (à gauche), 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 file vide.
  2. Enfiler Alice, puis Bob, puis Chloé : ils s'ajoutent à la queue, dans cet ordre.
  3. Défiler une fois : on retire et on récupère Alice, qui est en tête (la première arrivée).
  4. Enfiler David : il s'ajoute à la queue, derrière Chloé.
  5. Défiler deux fois de suite : on retire et on récupère Bob, puis Chloé, toujours dans leur ordre d'arrivée.

4.3 — Trace pas à pas

élément qui vient d'être enfilé élément en tête, sur le point d'être défilé
État de la file (la tête est à gauche, la queue à droite)
Étape 1 / 1
La ligne de code correspondant à l'étape en cours est surlignée ci-dessous.

4.4 — Code Python

file = []file.append("Alice")          # on enfile Alicefile.append("Bob")            # on enfile Bobfile.append("Chloé")          # on enfile Chloépremier = file.pop(0)         # on défile : renvoie "Alice"file.append("David")          # on enfile Davidsuivant = file.pop(0)         # on défile : renvoie "Bob"dernier = file.pop(0)         # on défile : renvoie "Chloé"

5. Complexité des opérations sur une file

6. Points clés à retenir

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