¿Qué es un Queue?
Un Queue (cola) es una estructura de datos lineal que sigue la regla de "primero en entrar, primero en salir" (FIFO). En otras palabras, el primer elemento que se inserta en la cola es el primero en ser eliminado. Funciona como una fila de elementos en la que nuevos elementos se agregan al final y se eliminan del frente. Las colas son útiles en situaciones donde es importante mantener el orden de llegada de los elementos.
Complejidad algorítmica
Los métodos en una cola tienen una complejidad algorítmica constante, lo que significa que la eficiencia no depende del tamaño de la cola. Veamos la complejidad de los principales métodos:
| Algoritmo | Big O Notation |
|---|---|
| Acceder a elementos | O(n) |
| Insertar | O(1) |
| Eliminar | O(1) |
| Verificar si está vacía | O(1) |
| Verificar la cantidad | O(1) |
Como se puede observar, las operaciones de acceso, inserción y eliminación son todas O(1), lo que hace que los queues sean altamente eficientes.
Oportunidades donde puedes usar un Queue
Hay diversas situaciones en las que es conveniente utilizar un Queue:
Situaciones en las que NO es muy conveniente usarlos
Aunque los queues son eficientes para ciertos casos, hay situaciones donde no son la mejor opción:
Construyamos un Queue
A continuación, mostraremos una implementación de una cola en Python utilizando la clase Node para representar los nodos del queue y la clase Queue para definir la estructura de la cola:
class Node: def __init__(self, value): self.value = value self.next = None class Queue: def __init__(self): self.first = None self.last = None self.length = 0 def enqueue(self, value): new_node = Node(value) if self.length == 0: self.first = new_node self.last = new_node else: self.last.next = new_node self.last = new_node self.length += 1 def dequeue(self): if self.length == 0: raise IndexError("La queue está vacía") removed_node = self.first if self.first == self.last: self.last = None self.first = self.first.next self.length -= 1 return removed_node.value def is_empty(self): return self.length == 0 def size(self): return self.length
En esta implementación, la clase Node representa un nodo de la cola, con un constructor que inicializa el valor del nodo y establece next como None.
La clase Queue representa la cola y tiene un constructor que inicializa los punteros first y last como None y la longitud length en 0.
Los métodos implementados en la clase Queue son los siguientes:
enqueue: Agrega un nuevo nodo al final de la cola. Si la cola está vacía, tanto first como last apuntan al nuevo nodo. En caso contrario, se establece last.next para que apunte al nuevo nodo y se actualiza last para que apunte al nuevo nodo.dequeue: Elimina y devuelve el valor del nodo en el frente de la cola. Si la cola está vacía, se lanza una excepción IndexError. Si first y last son iguales, se establece last en None. Se actualiza first para que apunte al siguiente nodo en la cola, se disminuye length en 1 y se devuelve el valor del nodo removido.is_empty: Verifica si la cola está vacía comprobando si length es igual a 0.size: Devuelve la cantidad de nodos en la cola, que es el valor de length.Esta implementación nos permite crear y utilizar una cola eficiente en Python, respetando el principio de "primero en entrar, primero en salir".
Jhon Freddy Tavera Blandon
EstudianteNicolas Alpargatero
EstudianteWaldir Zapata Garcia
Estudianteclass Queue: def __init__(self): self.items = [] def is_empty(self): return len(self.items) == 0 def enqueue(self, item): self.items.append(item) def dequeue(self): if not self.is_empty(): return self.items.pop(0) else: raise Exception("Queue is empty") def size(self): return len(self.items)
# Crear una cola para los mensajes de correo electrónico email_queue = Queue() # Simular la llegada de mensajes de correo electrónico email_queue.enqueue("Mensaje 1") email_queue.enqueue("Mensaje 2") email_queue.enqueue("Mensaje 3") # Verificar el tamaño de la cola print("Número de mensajes en la cola:", email_queue.size()) # Output: Número de mensajes en la cola: 3 # Procesar los mensajes de correo electrónico en orden de llegada while not email_queue.is_empty(): message = email_queue.dequeue() print("Procesando:", message) # Verificar si la cola está vacía después de procesar los mensajes print("¿La cola está vacía?", email_queue.is_empty()) # Output: ¿La cola está vacía? True
Esta es solo una implementación básica de un Queue en Python. En aplicaciones reales, el Queue podría utilizarse para manejar la llegada y procesamiento de mensajes de correo electrónico, tareas encoladas en un servidor, procesamiento de datos en el orden de llegada y muchas otras situaciones donde se requiere mantener un orden específico en el procesamiento de elementos.
it's ok queue.