You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.3 KiB
92 lines
2.3 KiB
2 years ago
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
from lib.listeChaine import ListeChaine
|
||
|
|
||
|
class Pile_lst:
|
||
|
"""Implémentation d'une pile par une liste."""
|
||
|
def __init__(self):
|
||
|
"""Crée une pile vide."""
|
||
|
self.__pile = []
|
||
|
|
||
|
def est_vide(self):
|
||
|
"""Indique si la pile est vide."""
|
||
|
return self.__pile == []
|
||
|
|
||
|
def empiler(self, valeur):
|
||
|
"""Empile la valeur."""
|
||
|
self.__pile.append(valeur)
|
||
|
|
||
|
def depiler(self):
|
||
|
"""Dépile le sommet de la pile et le renvoie."""
|
||
|
return self.__pile.pop()
|
||
|
|
||
|
def taille(self):
|
||
|
"""Renvoie la taille de la pile."""
|
||
|
return len(self.__pile)
|
||
|
|
||
|
def sommet(self):
|
||
|
"""Renvoie le sommet de la pile (sans le dépiler)."""
|
||
|
return self.__pile[-1]
|
||
|
|
||
|
def __str__(self):
|
||
|
s = "|"
|
||
|
for val in self.__pile:
|
||
|
s = str(val) + "->" + s
|
||
|
return s
|
||
|
|
||
|
|
||
|
class Pile_chaine:
|
||
|
"""Implémentation d'une pile par une liste chaînée."""
|
||
|
def __init__(self):
|
||
|
"""Crée une pile vide."""
|
||
|
self.__pile = ListeChaine()
|
||
|
self.__taille = 0
|
||
|
|
||
|
def est_vide(self):
|
||
|
"""Indique si la pile est vide."""
|
||
|
return self.__taille == 0
|
||
|
|
||
|
def empiler(self, valeur):
|
||
|
"""Empile la valeur."""
|
||
|
self.__pile.ajoute(valeur)
|
||
|
self.__taille += 1
|
||
|
|
||
|
def depiler(self):
|
||
|
"""Dépile le sommet de la pile et le renvoie."""
|
||
|
if self.est_vide():
|
||
|
raise IndexError("Impossible de dépiler une pile vide.")
|
||
|
valeur = self.__pile.tete()
|
||
|
self.__pile = self.__pile.queue()
|
||
|
self.__taille -= 1
|
||
|
return valeur
|
||
|
|
||
|
def taille(self):
|
||
|
"""Renvoie la taille de la pile."""
|
||
|
return self.__taille
|
||
|
|
||
|
def sommet(self):
|
||
|
"""Renvoie le sommet de la pile (sans le dépiler)."""
|
||
|
if self.est_vide():
|
||
|
raise IndexError("Une pile vide n'a pas de sommet.")
|
||
|
return self.__pile.tete()
|
||
|
|
||
|
def __str__(self):
|
||
|
return str(self.__pile) + "->|"
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
p = Pile_lst()
|
||
|
print(p.est_vide())
|
||
|
p.empiler('A')
|
||
|
p.empiler('B')
|
||
|
p.empiler('C')
|
||
|
print(p.est_vide())
|
||
|
print(p.sommet())
|
||
|
print(p)
|
||
|
print(p.taille())
|
||
|
print(p.depiler())
|
||
|
print(p.depiler())
|
||
|
print(p.depiler())
|
||
|
print(p.est_vide())
|