Implementación de Colas en Python

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.

Etiquetas: Python colas FIFO BFS deque

Publicado el 6-19 06:08