Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.8 kB
1
Indexable
Never
#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)