nsi:terminales:structures:pile_implementation_listechainee
Table des matières
Implémentation procédurale des piles - variante liste chaînée
Choix de structure
Je propose une structure complètement différente par rapport à celle de Implémentation pile. Cette fois on adopte une structure de liste chaînée.
L'intérêt d'une liste chaînée est qu'elle peut fluctuer en taille. Nous n'allons donc pas fixer une taille à la création. Cette variante de pile est libre d'augmenter sans limite – les limites sont celles de la machine bien sûr.
De ce faite, nous n'avons plus besoin de fonction PILE_PLEINE(P). Néanmoins, si on veut maintenir une interface compatible, rien ne nous empêche de prévoir une fonction PILE_PLEINE(P) qui renvoie toujours False (cette variante de pile ne peut pas être pleine).
Dans cette variante, les nouveaux éléments sont insérés en tête de liste.
Fichier Python
"""
pile_variante_liste_chainee.py
Module définissant l'interface des piles
"""
def CREER_PILE_VIDE():
"""
Renvoie une pile vide
"""
return {"head":None}
def EST_VIDE(P):
"""
Renvoie True si la pile est vide, False sinon
"""
return P["head"] == None
def EST_PLEINE(P):
"""
Renvoie True si la pile est pleine, False sinon
"""
return False
def EMPILER(P, e):
"""
Ajoute l'élément e sur le dessus de la pile
précondition: pile non pleine
"""
new_maillon = {"value":e, "next":P["head"]}
P["head"] = new_maillon
def DEPILER(P):
"""
Enlève l'élément sur le dessus de la pile et le renvoie
précondition: pile non vide
"""
assert not EST_VIDE(P)
first_maillon = P["head"]
P["head"] = first_maillon["next"]
first_maillon["next"] = None
return first_maillon["value"]
def TEXTE(P):
"""
Renvoie une représentation texte du contenu de la pile
On utilise la notation, par ex, 4:9:17:12, 12 étant ici le sommet de la pile
"""
outStr = ":"
m = P["head"]
while m != None:
value = m["value"]
outStr += f"{value}:"
m = m["next"]
return outStr[:-1]
# zone de test
if __name__ == '__main__':
# création de P = 4:9:17:12
P = CREER_PILE_VIDE() # on n'a pas besoin d'indiquer une taille
EMPILER(P,4)
EMPILER(P,9)
EMPILER(P,17)
EMPILER(P,12)
# tests
assert EST_VIDE(P) == False
assert EST_PLEINE(P) == False
assert TEXTE(P) == "4:9:17:12"
assert DEPILER(P) == 12
assert TEXTE(P) == "4:9:17"
assert DEPILER(P) == 17
assert TEXTE(P) == "4:9"
DEPILER(P)
DEPILER(P)
assert EST_VIDE(P) == True
# si on arrive là, c'est que tous les test ont été passés avec succès
print("Succès !")
nsi/terminales/structures/pile_implementation_listechainee.txt · Dernière modification : de 114.119.146.215
