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).