maze/lib/pile.py

71 lines
2.4 KiB
Python
Raw Normal View History

2025-04-20 14:25:55 +02:00
class Cellule:
def __init__(self, x):
"""Constructeur de la classe Cellule :
valeur contient la valeur stockee dans la cellule.
suivant contient le pointeur vers la cellule suivante.
suivant est toujours initialise a None."""
self.valeur = x
self.suivant = None
def __del__(self):
"""Destructeur de la classe Cellule :
Supprime la valeur, le pointeur suivant et la cellule elle-meme."""
del self.valeur
del self.suivant
del self
class Pile:
def __init__(self):
"""Constructeur de la classe Pile :
sommet contient le pointeur vers la cellule suivante.
sommet est toujours initialise a None."""
self.sommet = None
self.__taille = 0
def est_vide(self):
"""Renvoie True si la pile est vide, False sinon.
Entree : aucune.
Sortie : booleen."""
return self.__taille == 0
def __len__(self):
"""Renvoie la taille de la pile.
Entree : aucune.
Sortie : entier positif."""
return self.__taille
def empiler(self, x):
"""Ajoute x en tete de pile.
On cree une instance de cellule avec la valeur x
et suivant pointe vers la tete.
Entree : x est une valeur possible.
Sortie : aucune."""
self.__taille += 1 # la taille augmente de 1
if self.est_vide():
self.sommet = Cellule(x)
else:
nouveau_sommet = Cellule(x)
nouveau_sommet.suivant = (
self.sommet
) # on relie la Cellule a la suite de la Pile
self.sommet = (
nouveau_sommet # le sommet de la pile devient la nouvelle Cellule
)
return None
def depiler(self):
"""Supprimer la Cellule de sommet et renvoie sa valeur.
Entree : aucune.
Sortie : aucune."""
if self.est_vide():
raise BrokenPipeError("La Pile est vide !")
cellule_a_depiler = self.sommet
self.sommet = (
cellule_a_depiler.suivant
) # on court-circuite la Cellule de sommet
retour = cellule_a_depiler.valeur # on recupere sa valeur
del cellule_a_depiler # on la supprime
self.__taille -= 1 # on met a jour la taille de la pile
return retour