Les tableaux sont excellents quand on connaît la taille des données à l'avance. Mais que se passe-t-il quand les données arrivent de façon imprévisible - un flux de mesures de capteurs, une file de tâches à traiter par une IA, ou un historique de conversation qui grandit à chaque message ? Il faut des structures qui s'adaptent.
Voici les listes chaînées, les piles et les files d'attente - le trio dynamique.
Une liste chaînée stocke les éléments sous forme de chaîne de nœuds. Chaque nœud contient deux choses : la donnée et un pointeur vers le nœud suivant.
[data: "A" | next: →] → [data: "B" | next: →] → [data: "C" | next: null]
Contrairement aux tableaux, les nœuds ne sont pas contigus en mémoire. Ils peuvent être éparpillés - le pointeur indique simplement où trouver le suivant.
| Opération | Tableau | Liste chaînée | |-----------|---------|---------------| | Accès par index | O(1) ⚡ | O(n) 🐢 | | Insertion au début | O(n) 🐢 | O(1) ⚡ | | Insertion au milieu | O(n) 🐢 | O(1)* ⚡ | | Suppression au milieu | O(n) 🐢 | O(1)* ⚡ | | Utilisation mémoire | Compacte | Surcoût (pointeurs) |
*Une fois la position trouvée - la trouver reste O(n).
La barre d'onglets de votre navigateur permet d'ouvrir, fermer et réorganiser librement. Un tableau ou une liste chaînée serait-il mieux adapté pour gérer les onglets ouverts ? Pensez à ce qui se passe quand on ferme un onglet au milieu.
Sign in to join the discussion
Une pile (stack) fonctionne exactement comme une pile d'assiettes : on ajoute par le haut et on retire par le haut.
Push "A" → [A]
Push "B" → [A, B]
Push "C" → [A, B, C]
Pop → [A, B] (removed "C")
Pop → [A] (removed "B")
Deux opérations définissent une pile :
Les deux sont en O(1) - instantanées, quelle que soit la taille.
Quand vous voyez une erreur « stack overflow », la pile d'appels a littéralement manqué d'espace - généralement parce qu'une fonction s'appelle elle-même sans jamais s'arrêter (récursion infinie). Le célèbre site de questions-réponses Stack Overflow tire son nom de cette erreur.
Vous implémentez une fonction « annuler » pour une application de dessin. Quelle structure modélise le mieux l'historique des actions ?
Une file d'attente (queue) fonctionne comme une file au magasin : le premier arrivé est le premier servi.
Enqueue "A" → [A]
Enqueue "B" → [A, B]
Enqueue "C" → [A, B, C]
Dequeue → [B, C] (removed "A")
Dequeue → [C] (removed "B")
Une API d'IA reçoit 10 000 requêtes par seconde. Quelle structure garantit le traitement dans l'ordre d'arrivée ?
Il existe aussi une file de priorité (priority queue), où les éléments sont traités selon leur priorité plutôt que leur ordre d'arrivée. Les systèmes d'IA utilisent les files de priorité pour traiter les tâches urgentes en premier - par exemple, une voiture autonome peut prioriser la détection d'obstacles sur la planification d'itinéraire.
Les modèles de langage traitent le texte comme des séquences. En coulisses, des frameworks comme PyTorch et TensorFlow utilisent des structures de type liste chaînée pour construire des graphes de calcul. Quand on entraîne un réseau de neurones, la mémoire est constamment allouée et libérée ; les allocateurs utilisent souvent des listes chaînées de blocs mémoire libres.
Un chatbot doit mémoriser les 10 derniers messages d'une conversation mais supprimer les plus anciens. Utiliseriez-vous une pile, une file d'attente, ou autre chose ? Que se passe-t-il quand le 11e message arrive ?
Quelle affirmation sur les listes chaînées est FAUSSE ?