Lecciones · #3 de 11

Pilas

LIFO — el último en entrar, el primero en salir

Stack · LIFO

size0 top
empty stack — push to begin
init

Mini-game · balanced brackets (powered by a stack)

Type an expression. Brackets must open and close in mirror order({[…]}) is fine, ([)] is not. The parser uses a stack: every opener pushes the expected closer; every closer must match the value on top. Watch how each character is classified, and how the stack grows and shrinks below.

try
  • opener → push
  • closer matches top
  • mismatch / underflow
  • ignored char

Pruébalo: Apila fichas en la torre; sácalas una a una. Luego, abajo: alimenta cualquier cadena con paréntesis al juego de paréntesis — la pila es el analizador.

Por qué importa

Las pilas están por todas partes: llamadas a funciones, deshacer/rehacer, análisis de expresiones, algoritmos de retroceso (backtracking). Entender las pilas significa entender cómo se ejecutan los programas y cómo resolver problemas que requieren "recordar" y "deshacer".

La idea

Piensa en una pila de platos en una cafetería. Solo puedes añadir o quitar desde arriba. El último plato colocado es el primero en retirarse.

El último en entrar, el primero en salir (LIFO).

Esta simple restricción es increíblemente poderosa:

Todas las operaciones son O(1) — solo tocas la cima.

Puntos clave

Profundizando

La pila de llamadas es la razón por la que funcionan las funciones recursivas — las variables locales de cada llamada se apilan y se desapilan al retornar. El desbordamiento de pila (stack overflow) ocurre cuando la recursión se va demasiado profundo. Las pilas también son clave para convertir notación infija a postfija (algoritmo shunting-yard) y para evaluar expresiones postfijas en una sola pasada.

En la práctica

Detalles matemáticos

Complejidad temporal
Push: O(1)
Pop: O(1)
Peek: O(1)
Search: O(n)
Espacio
O(n) para n elementos

Implementación

Operaciones de pila

let mut stack = Vec::new();

stack.push(1);  // Apilar en la cima
stack.push(2);
stack.push(3);  // Pila: [1, 2, 3] (3 es la cima)

let top = stack.pop();  // Devuelve Some(3)
let peek = stack.last(); // Devuelve Some(&2)

Aplicaciones clásicas

Práctica

Tres problemas clásicos de pilas — cada uno es una forma distinta de usar la disciplina LIFO:

Explora todos los problemas de práctica