Pilas (stacks) y colas (queues)
Son dos formas de organizar datos según cómo entran y salen.
Pila (LIFO)
LIFO = Last In, First Out: el último en entrar es el primero en salir, como
una pila de platos. Operaciones típicas: push (apilar) y pop (desapilar).
class Pila {
constructor() {
this.items = [];
}
push(valor) {
this.items.push(valor);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
get size() {
return this.items.length;
}
}
Cola (FIFO)
FIFO = First In, First Out: el primero en entrar es el primero en salir, como
una fila en una tienda. Operaciones: enqueue (encolar) y dequeue (sacar).
class Cola {
constructor() {
this.items = [];
}
enqueue(valor) {
this.items.push(valor);
}
dequeue() {
return this.items.shift();
}
get size() {
return this.items.length;
}
}
En la práctica, usar
shift()esO(n). Para colas grandes existen implementaciones más eficientes, pero esta versión es perfecta para aprender.
Usos reales
- Pilas: deshacer/rehacer, evaluar expresiones, recorrer el historial.
- Colas: tareas pendientes, impresión, procesar mensajes en orden.
Ejemplos
Una pila en acción
class Pila {
constructor() { this.items = []; }
push(valor) { this.items.push(valor); }
pop() { return this.items.pop(); }
peek() { return this.items[this.items.length - 1]; }
get size() { return this.items.length; }
}
const historial = new Pila();
historial.push("pagina1");
historial.push("pagina2");
console.log("Elementos:", historial.size); // 2
console.log("Atrás a:", historial.pop()); // pagina2
console.log("Atrás a:", historial.pop()); // pagina1