Propiedades Fundamentales
- Orden FIFO: Los elementos se procesan en el mismo orden en que se añadieron.
- Operaciones en extremos opuestos: La inserción ocurre en el extremo trasero (rear), y la extracción en el extremo frontal (front).
- Acceso restringido: Solo se tiene acceso directo al elemento en el frente; los demás no son accesibles directamente.
Las operaciones esenciales son enqueue (encolar) y dequeue (desencolar). Aunque una lista podría usarse para simular una cola, su eficiencia en inserciones y eliminaciones al pricnipio es pobre (O(n)), por lo que no es adecuada para uso intensivo.
Categorías de Colas
Cola Estándar
Permite inserción por un lado y extracción por el contrario. La biblioteca estándar de Python ofrece una implementación segura para hilos.
import queue
estructura = queue.Queue()
estructura.enqueue('valor1')
estructura.enqueue('valor2')
print(estructura.dequeue()) # Muestra 'valor1'
Cola Circular
Utiliza un arreglo de tamaño fijo. Los índices de cabeza y cola se reinician cíclicamente al alcanzar el final del buffer.
class ColaCircular:
def __init__(self, capacidad_maxima=100):
self.contenedor = [None] * capacidad_maxima
self.tamano = capacidad_maxima
self.frente = 0
self.final = 0
self.elementos = 0
def insertar(self, dato):
if self.esta_llena():
raise MemoryError("Cola saturada")
self.contenedor[self.final] = dato
self.final = (self.final + 1) % self.tamano
self.elementos += 1
def extraer(self):
if self.esta_vacia():
raise IndexError("Cola vacía")
valor = self.contenedor[self.frente]
self.frente = (self.frente + 1) % self.tamano
self.elementos -= 1
return valor
def esta_vacia(self):
return self.elementos == 0
def esta_llena(self):
return self.elementos == self.tamano
# Prueba rápida
buffer = ColaCircular(5)
for x in range(4):
buffer.insertar(x)
print(buffer.extraer()) # Devuelve 0
buffer.insertar(99)
Deque (Cola Doble)
Soporta inserción y eliminación en ambos extremos. collections.deque es una implementación optimizada que puede definir un límite máximo de elementos.
from collections import deque
secuencia = deque([1, 2, 3], maxlen=5)
secuencia.append(10) # Agrega al final
secuencia.popleft() # Remueve del inicio
secuencia.appendleft(20) # Agrega al inicio
secuencia.pop() # Remueve del final
Ámbitos de Uso
- Gestión de tareas: Organiza la ejecución secuencial de procesos en sistemas operativos o aplicaciones.
- Algoritmos BFS: Facilita la exploración por niveles en grafos y árboles durante búsquedas en amplitud.
- Memoria caché: Implementa políticas de reemplazo FIFO en sistemas de almacenamiento temporal.
- Concurrencia: Permite el interbloqueo seguro de datos entre múltiples hilos de ejecución.