Une pile, en anglais Stack, est une structure de données LIFO, pour Last In, First Out, au sens où l'élément le plus récemment ajouté sur la pile sera le prochain à en être retiré. En cela, elle peut représenter une pile d'objets sur une table (on enlève, conceptuellement, l'élément sur le dessus, pas un élément en-dessous, pour éviter que le tout ne s'écroule, et on ajoute seulement sur le dessus pour les mêmes raisons), mais aussi toute entité structurée sans chevauchement, comme le début et la fin d'une fonction ou une paire de parenthèses. C'est probablement la structure de données la plus simple... et la plus utile.
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 |
---|---|---|---|---|---|
|
|
Ajouter un élément sur le dessus de la pile |
La pile 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 du dessus de la pile. Retournera l'élément dans certaines implémentations, et sera void dans d'autres implémentations |
La pile 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 |
top peek |
Consulter le dessus de la pile, sans en extraire l'élément |
La pile 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).
Pile d'entiers avec C++ | Pile générique avec C++ |
---|---|
|
|
Exécution | Exécution |
|
|
Quelques exemples :
Versions sans verrous :