##Fernando Rendon - Mariana Munera ## from os import system class Nodo: def __init__(self, dato): self.info = dato self.liga = None class Fila: def __init__(self): self.primero = None self.ultimo = None def ultimo_dato(self): ultimo_n = self.primero while (ultimo_n.liga != None): ultimo_n = ultimo_n.liga return ultimo_n def anterior(self, dato): p = self.primero y = None while (p != dato): y = p p = p.liga return y def desconectar(self, x, y): self.ultimo = self.ultimo_dato() if (x != self.primero): y.liga = x.liga if (x == self.ultimo): self.ultimo = y else: self.primero = self.primero.liga if (self.primero == None): self.ultimo = None return x.info def Enfilar(self, nuevo_nodo): if self.primero: ultimo_nodo = self.primero while ultimo_nodo.liga != None: ultimo_nodo = ultimo_nodo.liga ultimo_nodo.liga = nuevo_nodo else: self.primero = nuevo_nodo def Desenfilar(self): if (self.primero == None): print("") print(" * Subdesbordamiento * - La Fila está vacia ") else: y = self.desconectar(self.primero, self.anterior(self.primero)) return y def MostrarFila(self): temp = self.primero if self.primero == None: print("") print(" * La Fila está vacia *") else: print("") print("✏ Fila: ") print(" ") while temp != None: print(" <-- ", temp.info, end=" ") temp = temp.liga print(" ") print(" ") class Pila: def __init__(self): self.primero = None self.ultimo = None def ultimo_dato(self): ultimo_n = self.primero while (ultimo_n.liga != None): ultimo_n = ultimo_n.liga return ultimo_n def anterior(self, dato): p = self.primero y = None while (p != dato): y = p p = p.liga return y def desconectar(self, x, y): self.ultimo = self.ultimo_dato() if (x != self.primero): y.liga = x.liga if (x == self.ultimo): self.ultimo = y else: self.primero = self.primero.liga if (self.primero == None): self.ultimo = None def Apilar(self, nuevo_nodo): if self.primero: ultimo_nodo = self.primero while ultimo_nodo.liga != None: ultimo_nodo = ultimo_nodo.liga ultimo_nodo.liga = nuevo_nodo else: self.primero = nuevo_nodo def DesApilar(self): if (self.primero == None): print(" * Subdesbordamiento * - La Pila está vacia ") else: self.desconectar(self.ultimo_dato(), self.anterior(self.ultimo_dato())) def MostrarPila(self): temp = self.primero if self.primero == None: print(" * La Pila está vacia *") else: datos = [] while temp != None: datos.append(temp.info) temp = temp.liga print("≣ Pila: ") print(" ") tamaño = len(datos) tempc = 1 while tempc != tamaño + 1 : print(datos[tempc * -1]) tempc = tempc + 1 print(" ") print(" ") pila = Pila() fila = Fila() def Menu(): op = 0 while(op != 3): print("*** Menú Principal ***") print("") print("Opciones:") print("") print("1. Enfilar") print("2. Desenfilar y Guardar en una Pila") print("3. Salir") print("") op = int(input("Ingrese una Opción: ")) if op == 1: system("clear") print("") dato = input("Ingrese el Dato que Desea Enfilar: ") fila.Enfilar(Nodo(dato)) fila.MostrarFila() elif op == 2: system("clear") dato = fila.Desenfilar() pila.Apilar(Nodo(dato)) print("") fila.MostrarFila() print("") pila.MostrarPila() elif op == 3: system("clear") print("*** Programa Finalizado ***") break else: system("clear") print("") print(" --- Ingrese una Opción Correcta ---") print("") Menu()