Les piles

Comme expliqué précédemment, une pile travaille en mode LIFO (Last In First Out). Pour être utilisée, l'interface d'une pile doit permettre a minima :
- la création d'une pile vide
- l'ajout d'un élément dans la pile (qui sera forcément au dessus). On dira qu'on empile.
- le retrait d'un élément de la pile (qui sera forcément celui du dessus) et le renvoi de sa valeur. On dira qu'on dépile.
Utilisation d'une interface de pile
Exercice 3
On considère l'enchaînement d'opérations ci-dessous. Écrire à chaque étape l'état de la pile p et la valeur éventuellement renvoyée.
Bien comprendre que la classe Pile() et ses méthodes n'existent pas vraiment. Nous jouons avec son interface.
On prendra pour convention que la tête de la pile est à droite.
1. p = Pile() # p = None
2. p.empile(3) # p = 3
3. p.empile(5) # p = 3 5 par convention
4. p.est_vide() # False
4. p.empile(1) # p = 3 5 1
5. p.depile() # p = 3 5 valeur renvoyée : 1
6. p.depile() # p = 3 valeur renvoyée : 5
7. p.empile(9) # p = 3 9
8. p.depile() # p = 3 valeur renvoyée :9
9. p.depile() # p est vide valeur renvoyée : 3
10. p.est_vide() # True
Implémentation(s) d'une pile
L'objectif est de créer une classe Pile. L'instruction Pile() créera une pile vide. Chaque objet Pile disposera des méthodes suivantes :
est_vide(): indique si la pile est vide.empile(): insère un élément en haut de la pile.depile(): renvoie la valeur de l'élément en haut de la pile ET le supprime de la pile.__str__(): permet d'afficher la pile sous forme agréable (par ex :|3|6|2|5|) parprint()
À l'aide du type list de Python
Exercice 4
Créer la classe Pile ci-dessus.
Le type list de Python est parfaitement adapté. Des renseignements intéressants à son sujet peuvent être trouvés ici.
À l'aide d'une liste chaînée et de la classe Cellule
Précédemment nous avons créé la classe Cellule :
Exercice 5
À l'aide cette classe, re-créer une classe Pile disposant exactement de la même interface que dans l'exercice précédent.
Test de l'implémentation :
A retenir
Pour l'utilisateur, les interfaces précédentes sont strictement identiques. Il ne peut pas savoir, en les utilisant, l'implémentation qui est derrière.

Application des piles
Exercice 6
Simulez une gestion de l'historique de navigation internet, en créant une classe Nav qui utilisera une pile.
Attention, il ne faut pas réinventer la classe Pile, mais s'en servir !
Exemple d'utilisation :
Créé: January 24, 2023