GUILLAUME Baptiste
10 months ago
2 changed files with 124 additions and 1 deletions
@ -0,0 +1,91 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
from 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()) |
@ -1,2 +1,34 @@ |
|||||
|
from Pile import Pile_lst |
||||
|
import tkinter as tk |
||||
|
|
||||
class Expression: |
class Expression: |
||||
|
def __init__(self, valeur, gauche, droite): |
||||
|
self.valeur = valeur |
||||
|
self.gauche = gauche |
||||
|
self.droite = droite |
||||
|
|
||||
|
def evalue(self): |
||||
|
if self.valeur == '+': |
||||
|
return self.gauche.evalue() + self.droite.evalue() |
||||
|
if self.valeur == '*': |
||||
|
return self.gauche.evalue() * self.droite.evalue() |
||||
|
else: |
||||
|
return self.valeur |
||||
|
|
||||
|
def __str__(self): |
||||
|
if self.valeur != '+' and self.valeur != '*': |
||||
|
return self.valeur |
||||
|
if self.valeur == '+' or self.valeur == '*': |
||||
|
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" |
||||
|
|
||||
|
def npi2tree(exp): |
||||
|
pile_npi = Pile_lst() |
||||
|
lst_npi = exp.split() |
||||
|
for element in lst_npi: |
||||
|
if element == '+' or element == '*': |
||||
|
exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) |
||||
|
pile_npi.empiler(exp_npi) |
||||
|
else: |
||||
|
pile_npi.empiler(int(element)) |
||||
|
return pile_npi.sommet() |
||||
|
|
Loading…
Reference in new issue