Tutorial de estructura de datos de pila de Python
Implemente una pila LIFO en Python. Ejecute nuestro ejemplo de código de pila interactivo para dominar los límites de inserción, extracción, visualización y capacidad.
Descripción general
Una pila es una estructura de datos lineal que sigue el principio de último en entrar, primero en salir (LIFO). Esto significa que el último elemento añadido a la pila es el primero en eliminarse, similar a una pila de platos.
La pila admite dos operaciones principales: push (agrega un elemento en la parte superior) y pop (elimina el elemento agregado más recientemente). Además, una operación de vistazo o superior permite inspeccionar el elemento superior sin retirarlo.
En Python, las pilas se pueden construir fácilmente usando una lista con los métodos `.append()` y `.pop()`, o usando el objeto `collections.deque` que ofrece operaciones optimizadas de cola de doble extremo en tiempo O(1).
Código y salida de ejecución
Una implementación de Stack personalizada que utiliza la estructura de lista de Python para emular funciones push, pop y peek.
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
print(f"Pushed: {item}")
def pop(self):
if self.is_empty():
return "Underflow: Stack is empty"
popped = self.items.pop()
print(f"Popped: {popped}")
return popped
def peek(self):
if self.is_empty():
return "Stack is empty"
return self.items[-1]
def size(self):
return len(self.items)
# Initialize stack
stack = Stack()
stack.push("Apples")
stack.push("Bananas")
stack.push("Cherries")
print(f"Current Stack Size: {stack.size()}")
print(f"Top Element (Peek): {stack.peek()}")
stack.pop()
print(f"Stack after Pop: {stack.items}")Pushed: Apples
Pushed: Bananas
Pushed: Cherries
Current Stack Size: 3
Top Element (Peek): Cherries
Popped: Cherries
Stack after Pop: ['Apples', 'Bananas']Implementación paso a paso
- Gestión de funciones de deshacer en sistemas de software
- Análisis de sintaxis y verificación de paréntesis en compiladores
- Seguimiento de pilas de llamadas de ejecución durante la recursividad en motores
Preguntas frecuentes
¿Por qué se prefiere collections.deque a una lista normal para Stacks?
Si bien las listas son convenientes, son matrices dinámicas ocultas. Cuando cambian de tamaño, la reasignación de memoria puede llevar O(n) tiempo. El objeto deque utiliza una arquitectura de lista doblemente enlazada, lo que garantiza O(1) push y pop.
¿Se pueden desbordar las pilas en Python?
Una clase de pila estándar en Python que utiliza matrices de listas crecerá hasta consumir toda la memoria disponible del sistema. Sin embargo, la pila de recursividad en Python tiene un límite predeterminado (normalmente 1000) para evitar que los bucles infinitos bloqueen el intérprete.
Temas relacionados
Domine las operaciones de cola FIFO en Python. Ejecute y ejecute nuestro ejemplo de cola interactiva que muestra los métodos de poner y quitar la cola.
Implementación de lista enlazada individualmente de PythonAprenda cómo implementar una lista enlazada individualmente en Python. Explore la asignación de memoria dinámica, operaciones de nodos, inserción, recorrido y eliminación.