#TAD PILA CON OPERACIONES BASICAS COMO APILAR, DESAPILAR, ES_VACIA E IMPRIMIR (PARA CREAR UNA PILA GENERAR UN INSTANCIA)
class Pila:
""" Representa una pila con operaciones de apilar, desapilar y
verificar si está vacía. """
def __init__(self):
self.items=[]
def apilar(self, x):
self.items.append(x)
def es_vacia(self):
return self.items == []
def desapilar(self):
if not self.es_vacia():
return self.items.pop()
else:
print("La pila está vacía")
def imprimir_pila(self):
print("Pila:", self.items)
#CREO LAS PILAS NECESARIAS PARA EL PROCESO
PO = Pila()
PP = Pila()
PLL = Pila()
PC = Pila()
#FUNCION GENERICA QUE PROCESA SI ESTA CORRECTO EL ORDEN DE SIGNOS DE
#APERTURA Y CLAUSURA
def procesarDato(dato, PG, apertura, clausura):
flag = True
if dato == apertura:
PG.apilar(dato)
elif dato == clausura:
if PG.es_vacia():
flag = False
else:
PG.desapilar()
return flag
#APILO DATOS AL AZAR EN UN FOR RECORRIENDO LA CADENA DESDE ATRAS HACIA
#ADELANTE
cadena = "{[()]}"
for c in range(len(cadena)-1,-1,-1):
PO.apilar(cadena[c])
#UNA BANDERA PARA NO PROCESAR DATOS INNECESARIAMENTE
bandera = True
#PROCESO CADA UNO DE LOS CASOS
while(not PO.es_vacia() and bandera):
datoActual = PO.desapilar()
if (datoActual == "(" or datoActual == ")"):
bandera = procesarDato(datoActual,PP,"(",")")
elif (datoActual == "[" or datoActual == "]"):
bandera = procesarDato(datoActual,PC,"[","]")
elif (datoActual == "{" or datoActual == "}"):
bandera = procesarDato(datoActual,PLL,"{","}")
print(bandera)