Filas em Python: Entendendo FIFO e LIFO com Exemplos Práticos
Filas em Python: Entendendo FIFO e LIFO com Exemplos Práticos
O que é uma Fila em Python?
Uma fila é uma estrutura de dados que armazena itens em ordem linear. Itens são adicionados no final e removidos do início, seguindo o princípio First-In, First-Out (FIFO - Primeiro a Entrar, Primeiro a Sair). A fila expõe duas extremidades lógicas: frente e fundo — enqueue no fundo, dequeue na frente.
Neste tutorial você aprenderá:
- Como o módulo
queuedo Python funciona. - Tipos de filas disponíveis no Python.
- Como importar o módulo.
- Métodos principais dos objetos
QueueeLifoQueue. - Exemplos práticos para filas FIFO e LIFO.
- Operações em lote, ordenação e inversão de filas.
Como o Módulo Queue Funciona?
O comportamento é análogo a uma fila física: a primeira pessoa na fila é a primeira atendida. Na estrutura de dados fila, o elemento enfileirado primeiro será desenfileirado primeiro.

O ponto fundo é onde novos itens são inseridos (ex.: valor 7). O ponto frente é onde itens saem da fila; remover o primeiro item resulta no valor 1.
Como a fila é linear, você não pode remover um elemento arbitrário no meio; deve desenfileirar todos os elementos precedentes primeiro.

Tipos de Filas no Python
O módulo queue do Python oferece duas classes principais de fila:
- Fila FIFO – use
Queue(). O item mais antigo é sempre o primeiro a ser removido. - Fila LIFO – use
LifoQueue(). O item adicionado mais recentemente é retornado primeiro.
Começando: Importando o Módulo
O Python inclui o módulo queue por padrão; nenhuma instalação externa é necessária.
import queue
Instancie uma fila FIFO:
fila = queue.Queue()
Instancie uma fila LIFO:
fila = queue.LifoQueue()
Métodos Principais
Tanto Queue quanto LifoQueue expõem a mesma API principal:
put(item)– enfileira um item.get()– desenfileira e retorna o próximo item.empty()– retornaTruese a fila não tem itens.full()– retornaTruese a fila atingiu seu tamanho máximo.qsize()– retorna o número atual de itens.
Exemplo de Fila FIFO
Enfileirar um Item Único
import queue fila = queue.Queue() fila.put(10) # adiciona 10 à fila
Enfileirar Múltiplos Itens com Limite de Tamanho
fila = queue.Queue(maxsize=5) # máximo 5 itens
for i in range(1, 6):
fila.put(i)
print(fila.full()) # → True
Saída: True
Desenfileirar um Item
item = fila.get()
print('Item desenfileirado:', item)
Saída: Item desenfileirado: 10
Exemplo de Fila LIFO
Enfileirar um Item Único
fila = queue.LifoQueue() fila.put(10)
Desenfileirar um Item
item = fila.get()
print('Desenfileirado da LIFO:', item)
Saída: Desenfileirado da LIFO: 10
Operações em Lote
FIFO – Enfileirar 20 Números
fila = queue.Queue()
for i in range(20):
fila.put(i)
FIFO – Desenfileirar Todos
while not fila.empty():
print('Valor:', fila.get())
Saída: Value: 0 ... Value: 19
LIFO – Enfileirar 20 Números
fila = queue.LifoQueue()
for i in range(20):
fila.put(i)
LIFO – Desenfileirar Todos
while not fila.empty():
print('Valor:', fila.get())
Saída: Value: 19 ... Value: 0
Ordenando uma Fila (Bubble Sort)
fila = queue.Queue()
for item in [11, 5, 4, 21, 3, 10]:
fila.put(item)
n = fila.qsize()
for i in range(n):
x = fila.get()
for j in range(n-1):
y = fila.get()
if x > y:
fila.put(y)
else:
fila.put(x)
x = y
fila.put(x)
while not fila.empty():
print(fila.queue[0], end=' ')
fila.get()
Saída: 3 4 5 10 11 21
Invertendo uma Fila Usando Recursão
def inverter_fila(origem, destino):
item = origem.get()
if not origem.empty():
inverter_fila(origem, destino)
destino.put(item)
return destino
fila1 = queue.Queue()
for item in [11, 5, 4, 21, 3, 10]:
fila1.put(item)
fila2 = queue.Queue()
inverter_fila(fila1, fila2)
while not fila2.empty():
print(fila2.queue[0], end=' ')
fila2.get()
Saída: 10 3 21 4 5 11
Resumo Rápido
- O
queue.Queuedo Python implementa FIFO;queue.LifoQueueimplementa LIFO. - Use
put()para enfileirar eget()para desenfileirar. - Ambas as classes expõem
empty(),full()eqsize()para inspeção de estado. - Você pode definir um tamanho máximo em uma fila FIFO; tentar
put()além disso bloqueará até liberar espaço. - Ordenação e inversão são possíveis com algoritmos padrão, embora o
dequenativo docollectionsofereça mais flexibilidade.
python
- Dominando Operadores em Python: Guia Completo
- Dominando Dicionários em Python: Criação, Manipulação e Técnicas Avançadas
- Dominando o Método strip() do Python: Guia Completo e Exemplos Práticos
- Python len(): Guia Prático para Medir Comprimento de Objetos
- Dominando o yield do Python: Generator vs Return – Guia Prático
- Counter do Python em collections: Contagem Eficiente, Atualização e Operações Aritméticas
- Dominando enumerate() do Python: Loop com Índices para Listas, Tuplas, Strings e Dicionários
- Python time.sleep(): Como Adicionar Atrasos no Seu Código (Exemplo)
- Python List index(): Como Encontrar Posições de Elementos com Exemplos Práticos
- FIFO vs LIFO: Diferenças Principais, Vantagens, Desvantagens e Aplicações Práticas