# Ejercicio 12 - Clases Pila y Cola (programación orientada a objetos) from collections import deque print("Estudiante: ESCRIBE AQUÍ TU NOMBRE") class Pila: def __init__(self): self._datos = [] def apilar(self, x): self._datos.append(x) def desapilar(self): if self.esta_vacia(): raise IndexError("desapilar de una pila vacía") return self._datos.pop() def ver_tope(self): return None if self.esta_vacia() else self._datos[-1] def esta_vacia(self): return len(self._datos) == 0 def __len__(self): return len(self._datos) def __str__(self): return f"Pila{self._datos} <- tope" class Cola: def __init__(self): self._datos = deque() def encolar(self, x): self._datos.append(x) def desencolar(self): if self.esta_vacia(): raise IndexError("desencolar de una cola vacía") return self._datos.popleft() def ver_frente(self): return None if self.esta_vacia() else self._datos[0] def esta_vacia(self): return len(self._datos) == 0 def __len__(self): return len(self._datos) def __str__(self): return f"frente -> Cola{list(self._datos)}" p = Pila() c = Cola() for n in [1, 2, 3]: p.apilar(n) c.encolar(n) print(p) print(c) print("Desapilo:", p.desapilar(), "| Desencolo:", c.desencolar()) print("Tope:", p.ver_tope(), "| Frente:", c.ver_frente()) print("Tamaños:", len(p), len(c)) try: vacia = Pila() vacia.desapilar() except IndexError as error: print("Error controlado:", error)