Tutorial de estrutura de dados de fila Python

Domine as operações da fila FIFO em Python. Execute e execute nosso exemplo de fila interativa apresentando métodos de enfileiramento e desenfileiramento.

Experimente no Editor

Visão geral

Uma fila é uma estrutura de dados linear que opera segundo o princípio First-In, First-Out (FIFO). Os elementos são adicionados na parte traseira (enfileirar) e removidos na frente (desenfileirar), como uma fila de caixa em uma loja.

As filas são essenciais na ciência da computação para processar tarefas na ordem exata em que chegam. Eles atuam como buffers que separam os processos de produção e consumo.

Python fornece várias maneiras de construir filas: listas básicas, o módulo `collections.deque` para operações rápidas e seguras para threads e o módulo `queue.Queue` projetado especificamente para aplicativos multithread.

Saída de código e execução

Uma fila FIFO interativa construída usando Collections.deque para operações eficientes de remoção frontal.

from collections import deque

class Queue:
    def __init__(self):
        self.buffer = deque()
        
    def enqueue(self, item):
        self.buffer.append(item)
        print(f"Enqueued: {item}")
        
    def dequeue(self):
        if self.is_empty():
            return "Underflow: Queue is empty"
        dequeued = self.buffer.popleft()
        print(f"Dequeued: {dequeued}")
        return dequeued
        
    def is_empty(self):
        return len(self.buffer) == 0
        
    def size(self):
        return len(self.buffer)

# Test the Queue
q = Queue()
q.enqueue("Customer 1")
q.enqueue("Customer 2")
q.enqueue("Customer 3")

print(f"Queue Size: {q.size()}")
q.dequeue()
q.dequeue()

print(f"Remaining in Queue: {list(q.buffer)}")
Saída terminal
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']

Implementação passo a passo

  • Lidando com solicitações assíncronas em estruturas web de servidor
  • Filas de agendamento de tarefas em sistemas operacionais
  • Agentes de mensagens e buffers de fila (como RabbitMQ ou Redis)

Perguntas frequentes

Por que não usar list.pop(0) para retirar da fila em Python?

Usar `list.pop(0)` é lento porque requer o deslocamento de todos os elementos subsequentes na memória um índice para a esquerda, resultando em desempenho O(n). Em contraste, `deque.popleft()` é executado em tempo constante O(1).

O que é uma fila prioritária?

Uma fila de prioridade é uma variação em que os elementos são atendidos com base em uma prioridade associada, e não na ordem de chegada. Python implementa isso através do módulo `heapq`.

Tópicos Relacionados