FIFO — First In, First Out
Fila: entrada no back, saída no front
A fila é um tipo abstrato no qual somente o elemento inserido há mais tempo pode ser removido.
Contrato da fila
- enqueue(valor) adiciona um elemento no back/tail.
- dequeue() remove e retorna o elemento do front/head.
- front() consulta o próximo elemento sem removê-lo.
- FIFO preserva a ordem de chegada.
Implementações corretas
Uma fila pode usar um array circular ou uma lista encadeada com referências para as duas pontas.
Usar list.pop(0) em Python funciona logicamente, mas exige deslocar os demais elementos e custa O(n).
Laboratório: fila simplesmente encadeada
front aponta para a primeira célula e back para a última. Cada célula guarda o ID da próxima; a última aponta para None.
Enqueue no back e dequeue no front
Operação
Ordem do front ao back
Python: collections.deque
deque fornece inserções e remoções nas duas extremidades com desempenho aproximadamente O(1). Para fila, usamos somente o back para entrada e o front para saída.
Pythonfila pronta
from collections import deque
fila = deque([2, 3, 4])
fila.append(5) # enqueue no back
proximo = fila[0] # consulta o front
saiu = fila.popleft()# dequeue no front
print(saiu) # 2
print(list(fila)) # [3, 4, 5]
Fila encadeada
Manter front e back permite enqueue e dequeue em O(1), inclusive quando a fila tem muitos elementos.
Pythonligações essenciais
class Node:
def __init__(self, value):
self.value = value
self.next = None
class Queue:
def __init__(self):
self.front = None
self.back = None
def enqueue(self, value):
node = Node(value)
# Na primeira inserção, front e back apontam para o mesmo nó.
if self.back is None:
self.front = self.back = node
return
# Nas demais, o back antigo aponta para o novo último nó.
self.back.next = node
self.back = node
def dequeue(self):
if self.front is None:
raise IndexError("fila vazia")
# Retiramos sempre do front para preservar a ordem FIFO.
value = self.front.value
self.front = self.front.next
# Ao remover o último nó, as duas extremidades voltam a ser None.
if self.front is None:
self.back = None
return value
Referências usadas
- NIST — queue: FIFO, enqueue no tail e dequeue no head.
- Python — Using Lists as Queues: por que remover do início de
listé lento. - Python — collections.deque: operações O(1) nas extremidades.