Colas

Colas

Introducción a las colas

Las colas son una estructura de datos que funcionan de manera similar a las colas en la vida real. Cuando una persona va al supermercado, al cine o se sube al autobús, se incorpora al final de una cola (o fila). A medida que la fila avanza, el primer elemento es el que se atiende primero. Este comportamiento sigue el principio FIFO (First In, First Out).

En programación, las colas operan de la misma manera. Tenemos un dato que queremos almacenar en una cola, como un pedido o una compra, y lo colocamos al final de la estructura. Los elementos avanzan hacia la cabeza de la cola hasta que son procesados y eliminados.


Implementación básica de una cola

Una cola puede implementarse utilizando listas enlazadas. En este caso, cada elemento de la cola se representa como un nodo, y los nodos se conectan entre sí mediante punteros.

image.png

Aunque la estructura básica es similar a una lista enlazada, las operaciones en una cola tienen nombres y comportamientos específicos:

  1. Encolar: Introducir un elemento al final de la cola.
  2. Consultar: Obtener el siguiente elemento de la cola (el que está en la cabeza).
  3. Eliminar: Retirar el elemento de la cabeza de la cola una vez procesado.

Operaciones principales

  1. Encolar:
    • Esta operación consiste en agregar un elemento al final de la cola. Si usamos una lista enlazada, esto equivale a insertar un nodo al final.
  2. Consultar:
    • Consiste en obtener el elemento que está en la cabeza de la cola, es decir, el primer elemento.
  3. Eliminar:
    • Después de procesar un elemento, este debe eliminarse de la cola. En una lista enlazada, esto equivale a eliminar el nodo al principio de la lista.

Optimizaciones en la implementación

Una cola básica podría implementarse recorriendo todos los nodos para encontrar el último elemento al encolar. Sin embargo, esto no es eficiente. Para mejorar el rendimiento, podemos agregar un puntero adicional al último nodo de la cola. De esta manera:

  • Cabeza: Permite acceder rápidamente al primer elemento para consultar o eliminar.
  • Final: Permite agregar nuevos elementos directamente al final sin necesidad de recorrer toda la lista.
class Node{
	private int value;
	private Node next;
}

class NodeList{
	private Node head;
	
	private Node tail;
	
}

Este enfoque es similar al concepto de listas doblemente enlazadas, que se tratarán en futuros episodios.


Resumen de operaciones

En los siguientes pasos, veremos cómo implementar las operaciones de una cola:

  1. Encolar: Insertar un elemento al final de la cola.
  2. Consultar: Obtener el elemento en la cabeza de la cola.
  3. Eliminar: Retirar el elemento de la cabeza una vez procesado.

Operación combinada: Despachar

Algunos autores introducen una operación combinada llamada despachar. Esta operación realiza las siguientes tareas:

  1. Obtiene el primer elemento de la cola (consultar).
  2. Lo elimina de la cola (eliminar).
  3. Devuelve el nodo para que pueda ser procesado.

Esta operación se puede implementar fusionando las funciones de consulta y eliminación en una sola.


Tipos de colas

Existen otros tipos de colas, como las colas prioritarias, donde los elementos tienen un orden de prioridad para determinar el procesamiento. Sin embargo, por ahora nos centraremos en las colas simples.

En próximos episodios, veremos implementaciones detalladas de cada operación y exploraremos otros tipos de colas.

Ejercicio: Crear una cola y crear metodos para las siguientes operaciones

  1. Encolar: Insertar un elemento al final de la cola.
  2. Consultar: Obtener el elemento en la cabeza de la cola.
  3. Eliminar: Retirar el elemento de la cabeza una vez procesado.

Boceto 25122024 1525.png