Une file, en anglais Queue, est une structure de données FIFO, pour First In, First Out, au sens où les éléments en seront retirés dans le même ordre que celui de leur insertion. En cela, elle peut représenter une file d'attente ou un canal de communication simple. Il existe plusieurs variantes, comme par exemple les files prioritaires, où les éléments insérés dans la file sont extraits dans un ordre influencé par une politique particulière (p. ex. : en ordre de priorité), ou encore les files circulaires, qui opèrent sur un espace maximal fixe.
Les opérations clés d'une file suivent. Une implémentation peut bien sûr offrir d'autres services, ou utiliser d'autres noms que ceux utilisés ici.
Nom (français) | Nom (anglais) | Sémantique | Complexité typique | Risques d'échec / d'exception | Remarques |
---|---|---|---|---|---|
|
enqueue
push_back |
Ajouter un élément dans la file |
La file est pleine; s'applique si la pile a une capacité maximale fixée a priori Manque de ressources; s'applique si les noeuds sont alloués dynamiquement |
||
|
|
Retirer un élément de la file. Retournera l'élément dans certaines implémentations, et sera void dans d'autres implémentations |
La file est vide |
Une implémentation générique devra implémenter ce service de telle sorte qu'il soit void, du moins en l'absence d'un moteur de collecte d'ordures, sinon elle ne pourra être Exception-Safe |
|
est_vide |
empty |
Prédicat qui s'avère seulement si la pile est vide |
|
Si le langage le supporte, sera typiquement const Si le langage le supporte, sera typiquement noexcept |
|
examiner |
back peek |
Consulter le prochain élément disponible pour extraction, sans l'extraire |
La file est vide |
Si le langage le supporte, sera typiquement const Si le langage le supporte, sera typiquement noexcept Nécessaire pour réaliser une implémentation générique qui soit Exception-Safe, du moins en l'absence d'un moteur de collecte d'ordures. Peut être omise sinon |
Implémentation naïve à base de noeuds (capacité dynamique).
File d'entiers avec C++ | File générique avec C++ |
---|---|
|
|
Exécution | Exécution |
|
|
Pédagogie :
Texte de Jeff Preshing en 2012 montrant comment mettre au point une file circulaire de journalisation en mémoire des événements clés d'un programme, pour faciliter le débogage de programmes parallèles et concurrents : http://preshing.com/20120522/lightweight-in-memory-logging/
Versions sans verrous :