Ir al contenido
Background Image
  1. Programación/
  2. Estructuras de Datos/

Colas

Autor
Julian Nonino
Platform Engineer - DevOps
Tabla de contenido
Programación: Aprendiendo Estructuras de Datos - Este artículo es parte de una serie.
Parte 6: Este artículo

La naturaleza FIFO (first in, first out) de las colas se debe a que sólo se puede acceder y manipular el elemento inicial. Cuando se agrega un elemento a la cola se conoce como “enqueue”, mientras que eliminar un elemento se denomina “dequeue”.

Esto hace que el primer elemento en ser añadido a la cola también sea el primero en ser retirado, de ahí su comportamiento FIFO.

Diagrama de una cola
Diagrama de una cola

Operaciones principales
#

Las operaciones básicas de una cola son:

  • Enqueue: Agrega un elemento al final de la cola.
  • Dequeue: Saca el elemento del frente de la cola.
  • Peek: Obtiene el elemento al frente sin sacarlo.
  • isEmpty: Consulta si la cola está vacía.

Implementación
#

Al igual que las pilas, las colas se pueden implementar usando listas enlazadas. Se agrega al final y se saca del frente manteniendo referencias a ambos extremos.

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None


class Queue:
    def __init__(self):
        self.front = None
        self.end = None
        self.size = 0

    def enqueue(self, value):
        new_node = Node(value)
        if self.end is None:
            self.end = new_node
            self.front = new_node
            return
        self.end.next = new_node
        self.end = new_node
        self.size += 1

    def dequeue(self):
        if self.is_empty():
            return None
        value = self.front.value
        self.front = self.front.next
        if self.front is None:
            self.end = None
        self.size -= 1
        return value

    def peek(self):
        if self.is_empty():
            return None
        return self.front.value

    def is_empty(self):
        return self.front is None  # Returns true if front is None

    def __len__(self):
        return self.size

    def __str__(self):
        values = []
        current = self.front
        while current:
            values.append(str(current.value))
            current = current.next
        return "\n".join(values)


print("Creating a new queue")
queue = Queue()

print("==========")
print("Check if queue is empty")
print(f"Is queue empty? {queue.is_empty()}")


print("==========")
print("Enqueue three elements")
queue.enqueue("ABC")
queue.enqueue("DEF")
queue.enqueue("GHI")

print("==========")
print("Print queue after enqueuing elements:")
print(queue)

print("==========")
print("Get front element using dequeue")
print(f"queue.dequeue() => {queue.dequeue()}")

print("==========")
print("Print queue after dequeue element:")
print(queue)

print("==========")
print("Print front element using peek")
print(f"queue.peek() => {queue.peek()}")

print("==========")
print("Print queue after peek:")
print(queue)

print("==========")
print("Get front element using dequeue")
print(f"queue.dequeue() => {queue.dequeue()}")

print("==========")
print("Print queue after dequeue element:")
print(queue)

print("==========")
print("Check if queue is empty")
print(f"Is queue empty? {queue.is_empty()}")

print("==========")
print("Get front element using dequeue")
print(f"queue.dequeue() => {queue.dequeue()}")

print("==========")
print("Print queue after dequeue element:")
print(queue)

print("==========")
print("Check if queue is empty")
print(f"Is queue empty? {queue.is_empty()}")

Ejemplos de uso
#

Algunos usos comunes de colas:

  • Colas de impresión donde primero en entrar, primero en imprimir.
  • Colas de tareas en sistemas operativos para orden de ejecución.
  • Simulaciones donde se debe respetar orden de llegada como en bancos.
  • Canales de mensajes como los de RabbitMQ o Kafka.
  • Buffers circulares en audio para streaming.

Conclusión
#

Las colas son estructuras versátiles gracias a su principio FIFO. Tener un buen manejo de colas, implementación y aplicaciones reforzará tus habilidades como programador.


¡Gracias por haber llegado hasta acá!

Si te gustó el artículo, por favor ¡no olvides compartirlo con tu familia, amigos y colegas!

Y si puedes, envía tus comentarios, sugerencias, críticas a nuestro mail o por redes sociales, nos ayudarías a generar mejor contenido y sobretodo más relevante para vos.

Programación: Aprendiendo Estructuras de Datos - Este artículo es parte de una serie.
Parte 6: Este artículo

Relacionados

Listas Enlazadas
Mapas (Diccionarios)
Arreglos
Funciones Recursivas

comments powered by Disqus