Programme

NSI (Spé) — Structures de données

Listes chaînées, piles et files

Structures de données linéaires : listes chaînées, piles (LIFO), files (FIFO), implémentation en Python

Résumé synthétiqueFiche en 4 sectionsQuiz de 10 questionsGratuit, sans pub

Résumé

Comment ranger des données quand on ignore combien elles seront, et dans quel ordre on devra les ressortir ? Trois structures linéaires y répondent différemment. La liste chaînée enchaîne des maillons reliés par des références : insérer en tête coûte $O(1)$, mais atteindre le i-ème élément coûte $O(n)$. La pile (LIFO, Last In First Out) ne donne accès qu'à son sommet, comme une pile d'assiettes ou le Ctrl+Z. La file (FIFO, First In First Out) sert dans l'ordre d'arrivée, comme une file d'attente. Maîtriser ces trois structures, c'est savoir choisir la bonne boîte de rangement selon la façon dont on devra ressortir les données — et c'est le socle des arbres, des graphes et des parcours qui suivront.

S'entraîner

Questions fréquentes

Les points clés à retenir sur Listes chaînées, piles et files, extraits du quiz de révision.

Quel est le mode de fonctionnement d'une pile ?
Réponse :
LIFO
Une pile fonctionne en mode LIFO (Last In, First Out) : le dernier élément ajouté est le premier retiré, comme une pile d'assiettes.
Quelle est la complexité de l'accès au i-ème élément dans une liste chaînée ?
Réponse :
O(n)
Dans une liste chaînée, il faut parcourir les maillons un par un depuis la tête, ce qui donne une complexité O(n) pour accéder au i-ème élément.
Quelle structure utilise-t-on pour un parcours en largeur (BFS) ?
Réponse :
Une file
Le parcours en largeur (BFS) utilise une file (FIFO) pour traiter les nœuds dans l'ordre où ils ont été découverts.
Quelle opération est en O(n) avec une implémentation naïve de file par liste Python ?
Réponse :
defiler (pop(0))
pop(0) sur une liste Python est en O(n) car tous les éléments doivent être décalés d'un cran vers la gauche. Il vaut mieux utiliser collections.deque avec popleft().
Comment est composé un maillon d'une liste chaînée ?
Réponse :
Une valeur et une référence vers le maillon suivant
Un maillon contient une valeur (la donnée) et une référence (pointeur) vers le maillon suivant, ou None s'il est le dernier.
Que signifie FIFO ?
Réponse :
First In, First Out
FIFO signifie First In, First Out : le premier élément entré est le premier sorti, comme dans une file d'attente.
Quelle est la complexité de l'insertion en tête d'une liste chaînée ?
Réponse :
O(1)
L'insertion en tête est en O(1) : on crée un nouveau maillon qui pointe vers l'ancienne tête, puis on met à jour la tête.
Le mécanisme Ctrl+Z (annuler) est modélisé par quelle structure ?
Réponse :
Une pile
Le Ctrl+Z utilise une pile : chaque action est empilée, et annuler revient à dépiler la dernière action (LIFO).
Quelle méthode Python permet de défiler efficacement avec collections.deque ?
Réponse :
popleft()
collections.deque.popleft() retire le premier élément en O(1), contrairement à list.pop(0) qui est en O(n).
Une file peut être implémentée avec :
Réponse :
Deux piles
On peut implémenter une file avec deux piles : une pile d'entrée pour enfiler et une pile de sortie pour défiler. Quand la pile de sortie est vide, on transfère la pile d'entrée dedans.