Pilas y colas: Stack vs Queue — cuándo usar cada una

Pilas y colas son las estructuras de datos más simples pero más ubicuas en programación. Aparecen desde la gestión del call stack hasta las colas de impresión.

La pila (Stack) — LIFO

El último que entra, el primero que sale. Como una pila de platos.

# Python: list como stack
pila = []
pila.append(1)   # push
pila.append(2)
pila.append(3)
print(pila.pop())  # 3 — LIFO
print(pila.pop())  # 2

Casos de uso:

  • Call stack: cómo gestiona Python las llamadas a funciones
  • Ctrl+Z (deshacer): cada acción se apila, deshacer hace pop
  • Validación de paréntesis: verificar que ({[]}) está balanceado
  • DFS en grafos

Ejemplo: validar paréntesis

def validar(s):
    pila = []
    parejas = {")": "(", "}": "{", "]": "["}
    for c in s:
        if c in "({[":
            pila.append(c)
        elif c in ")}]":
            if not pila or pila[-1] != parejas[c]:
                return False
            pila.pop()
    return len(pila) == 0

print(validar("({[]})"))  # True
print(validar("({[})"))   # False

La cola (Queue) — FIFO

El primero que entra, el primero que sale. Como una fila de supermercado.

from collections import deque

cola = deque()
cola.append(1)       # enqueue
cola.append(2)
print(cola.popleft())  # 1 — FIFO

¿Por qué deque y no list? list.pop(0) es O(n), deque.popleft() es O(1).

Casos de uso:

  • BFS en grafos
  • Colas de impresión y procesamiento de requests
  • Buffers de streaming

Resumen rápido

Necesitas… Usar
Procesar en orden inverso Stack
Procesar en orden de llegada Queue
DFS en grafos Stack
BFS en grafos Queue
Historial de acciones Stack

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *