Implementación del método enqueue en JavaScript

Clase 23 de 29Curso de Estructuras de Datos con JavaScript

Contenido del curso

Resumen

Domina la implementación de un queue en JavaScript con una lógica clara y confiable. Aquí verás cómo manejar first, last y length, cómo enqueue agrega al final y cómo peek devuelve siempre el primer elemento. La clave está en enlazar nodos con next sin perder referencias, tal como en una linked list, y dejar lista la base para tu propio dequeue.

¿Qué es un queue y cómo se diferencia de stack?

Un queue es una estructura FIFO: el primer elemento en entrar es el primero en salir. A diferencia de un stack con top y bottom, aquí trabajamos con first y last. El método peek debe regresar siempre el elemento al frente, es decir, el first. Cuando se crea la instancia, comienza vacía y la vamos llenando con enqueue.

  • Clase y nodos: un Node con valor y puntero next.
  • Estado del queue: first, last y length para controlar la estructura.
  • Punteros: nunca dejes un nodo sin next si hay más elementos, para no perder referencias en memoria.
  • Prueba mental: al agregar 1, luego 2 y luego 3, first sigue en 1 y last avanza a 2 y luego a 3.

¿Cómo se implementa enqueue y peek en JavaScript?

La lógica de enqueue es agregar siempre al final. Si está vacío, el nuevo nodo es a la vez first y last. Si no, se enlaza con last.next y se actualiza last. El método peek retorna el first sin modificar la estructura.

¿Cómo luce la clase queue con first, last y length?

class Node { constructor(value) { this.value = value; this.next = null; } } class Queue { constructor() { this.first = null; this.last = null; this.length = 0; } peek() { return this.first; } enqueue(value) { const newNode = new Node(value); if (this.length === 0) { this.first = newNode; this.last = newNode; } else { this.last.next = newNode; this.last = newNode; } this.length++; return this; // para visualizar el estado actual. } // dequeue(): pendiente, elimina el elemento al frente. }

¿Qué hace enqueue cuando la lista está vacía?

if (this.length === 0) { this.first = newNode; this.last = newNode; }
  • Primer elemento: se vuelve first y last.
  • Estructura consistente: no hay nodos sueltos.

¿Cómo enlazar nodos con next y actualizar last?

else { this.last.next = newNode; this.last = newNode; }
  • Encadenamiento: last.next apunta al nuevo nodo.
  • Avance del final: last se actualiza al nuevo nodo.

¿Cómo probar y qué falta con dequeue?

Puedes replicar la prueba en consola: crear la instancia, agregar tres valores y consultar el frente con peek. Verás que el primero en entrar se mantiene al frente y last avanza con cada inserción.

  • Crear instancia: const queue = new Queue(); empieza vacía.
  • Agregar 1: queue.enqueue(1) el first y last son 1.
  • Agregar 2: queue.enqueue(2) el first sigue en 1, last pasa a 2.
  • Agregar 3: queue.enqueue(3) el last ahora es 3 y el encadenamiento es 1 → 2 → 3 por next.
  • Consultar frente: queue.peek() devuelve siempre el first.
  • Tu reto: implementar dequeue para “eliminar siempre el elemento que esté hasta adelante”, similar a un pop pero aplicado al frente del queue.

¿Te quedó alguna duda o quieres compartir tu implementación de dequeue o tu avance hacia tree? Cuéntame en comentarios y revisamos juntos.