Estructuras de datos · Sección 6

Colas y arreglos circulares

El contrato FIFO, frente y final; por qué desplazar elementos es costoso y cómo los índices circulares reutilizan el arreglo sin mover datos.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Conviene comprender nodos, arreglos, tamaño lógico y el operador módulo; la lección explica cómo se combinan.

02 / META OBSERVABLE

Al terminar deberías poder relacionar FIFO con Cola enlazada y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.

04 / PREPARA EL LABORATORIO

Instala un JDK actual y utiliza un editor o IDE con soporte para Java. Trabaja en un proyecto de laboratorio separado.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan FIFO y Cola enlazada? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Construirás colas que preservan FIFO sin desplazar todo el contenido en cada operación.

Al terminar podrás
  • Una cola es FIFO: entra al final y sale por el frente
  • Dos referencias vuelven constante una cola enlazada
  • Un arreglo circular reutiliza huecos mediante módulo
01
Orden de atención

Una cola es FIFO: entra al final y sale por el frente

offer agrega al final, poll retira el frente y peek lo consulta. Como en una fila de atención, lo más antiguo se atiende primero. En Queue, remove y element lanzan una excepción si está vacía; poll y peek retornan null. ArrayDeque no admite null, por lo que ese resultado sigue siendo inequívoco.

01

FIFO: First In, First Out.

02

frente señala el próximo elemento en salir.

03

final señala la próxima posición de inserción o el último nodo, según la representación.

Comprueba lo aprendido · 01

¿Qué estructura usarías si una urgencia debe adelantarse?

Mostrar respuesta +

Una cola de prioridad, porque una cola FIFO pura atiende según el orden de llegada.

02
Implementaciones

Dos referencias vuelven constante una cola enlazada

Una cola enlazada mantiene frente y final. Agregar enlaza después del final; retirar mueve el frente. Cuando se elimina el último nodo, ambas referencias deben quedar en null. Con una sola referencia, alguna operación exigiría recorrer.

01

Vacía implica frente == null y final == null.

02

El final siempre apunta al último nodo.

03

Retirar el último restaura el estado vacío completo.

Comprueba lo aprendido · 02

¿Qué fallo aparece si final conserva el nodo eliminado?

Mostrar respuesta +

La estructura queda con referencias contradictorias: parece vacía desde el frente, pero final apunta a un nodo que ya no pertenece a la cola.

03
Capacidad fija

Un arreglo circular reutiliza huecos mediante módulo

Desplazar todo el arreglo al retirar cuesta O(n). En un buffer circular, frente y final avanzan con módulo capacidad. size permite distinguir lleno de vacío aun cuando los índices coincidan.

01

La capacidad debe ser mayor que cero; siguiente = (indice + 1) % capacidad.

02

0 <= size <= capacidad.

03

offer falla o redimensiona cuando size == capacidad.

Comprueba lo aprendido · 03

¿Qué ventaja ofrece frente a desplazar tras cada poll?

Mostrar respuesta +

offer y poll permanecen O(1), porque solo actualizan un elemento y unos índices.

Resumen de la sección

Tu recorrido en tres ideas

  1. Una cola es FIFO: entra al final y sale por el frente
  2. Dos referencias vuelven constante una cola enlazada
  3. Un arreglo circular reutiliza huecos mediante módulo
PROFUNDIZACIÓN / LABORATORIO GUIADO

Simula una sala de espera con buffer circular

Relaciona contrato FIFO, índices modulares, capacidad y estado observable en una simulación.

CASO

Una sala admite cinco turnos pendientes; llegan y salen personas en secuencias que hacen girar los índices varias veces.

Procedimiento

  1. Define offer, poll y peek para vacío y lleno.
  2. Implementa frente, final y size con módulo.
  3. Genera una prueba aleatoria comparando cada operación con ArrayDeque.

Evidencia mínima

  • Secuencias de vuelta completa.
  • Estado de índices y contenido lógico.
  • Mismo resultado que la implementación de referencia.
Mostrar razonamiento modelo +

Los índices pueden coincidir tanto al estar vacío como lleno, por lo que size conserva la distinción. La prueba compara no solo las salidas, sino también orden y cantidad después de cada operación.

Para ir más lejos

¿Cómo redimensionarías sin alterar el orden lógico cuando frente no está en cero?

CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Desplazar todo el arreglo después de cada salida.

ERROR 02

Dejar final apuntando a un nodo cuando la cola quedó vacía.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Implementa una cola circular de capacidad fija con offer, poll, peek, size e isEmpty.

Mostrar pauta de corrección +
Una respuesta sólida:
  • Distingue lleno y vacío.
  • Reutiliza posiciones liberadas.
  • Prueba vueltas completas e intercaladas.