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.

Pruébelo en el editor

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}")
Salida terminal
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