Sobes.tech
Junior

O que sabe sobre a estrutura de dados 'fila'?

sobes.tech IA

Resposta da IA

A fila (Queue) é uma estrutura de dados linear que funciona segundo o princípio FIFO (First-In, First-Out): o primeiro elemento a entrar é o primeiro a sair.

Operações principais:

  • put/enqueue: adicionar um elemento ao final da fila.
  • get/dequeue: remover e devolver um elemento do início da fila.
  • peek/front: visualizar o elemento no início da fila sem removê-lo.
  • is_empty: verificar se a fila está vazia.
  • size: obter a quantidade atual de elementos.

Implementações em Python:

  • list: simples, mas ineficiente para operações frequentes pop(0) (deslocamento de elementos).
  • collections.deque: fila dupla, otimizada para adicionar/remover em ambos os extremos, usada eficazmente como uma fila comum.
  • queue.Queue: implementação segura para threads, conveniente para troca de dados entre threads.

Exemplos de uso de collections.deque:

# Inicialização da fila
from collections import deque
q = deque()

# Adicionar elementos (enqueue)
q.append('a')
q.append('b')
q.append('c')

# Remover e devolver elementos (dequeue)
first_element = q.popleft() # 'a'
second_element = q.popleft() # 'b'

# Visualizar o elemento no início (peek) - indireto, requer importar a função ou verificar se não está vazia
if q:
    peek_element = q[0] # 'c'

# Verificar se está vazia
is_empty = not q

# Tamanho
current_size = len(q)

Exemplos de uso de queue.Queue:

# Inicialização de uma fila segura para threads
from queue import Queue
q_threaded = Queue()

# Adicionar elementos (put)
q_threaded.put('task1')
q_threaded.put('task2')

# Remover e devolver elementos (get) - operação bloqueante por padrão

task = q_threaded.get() # 'task1'

# Notificar que o processamento do elemento terminou (para join)
q_threaded.task_done()

# Verificar se está vazia
is_empty_threaded = q_threaded.empty()

# Tamanho
current_size_threaded = q_threaded.qsize()

Aplicações:

  • Planeamento de tarefas (scheduler).
  • Buffers FIFO.
  • Algoritmos de percurso de grafos (BFS - Breadth-First Search).
  • Processamento de requisições (por exemplo, num servidor web).
  • Interação segura entre threads (com queue.Queue).