Módulo 3 - Filas: o primeiro a chegar é o primeiro a sair
Pilha ou fila: escolhendo a estrutura certa
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 12/07/2026
O que você vai aprender
- Escolher entre pilha e fila a partir do que o problema exige.
- Associar desfazer, histórico e recursão à pilha (LIFO).
- Associar atendimento justo, impressão e busca em largura à fila (FIFO).
- Reconhecer que BFS usa fila e DFS usa pilha nos percursos de grafos.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Pilha ou fila: escolhendo a estrutura certa.
Os objetivos desta aula. Escolher entre pilha e fila a partir do que o problema exige. Associar desfazer, histórico e recursão à pilha (LIFO). Associar atendimento justo, impressão e busca em largura à fila (FIFO). Reconhecer que BFS usa fila e DFS usa pilha nos percursos de grafos.
Veja o essencial, parte por parte.
A pergunta que decide. Use pilha (LIFO) quando quer o último a chegar: desfazer, voltar, recursão.
Duas estruturas, dois percursos de grafo. A escolha entre pilha e fila fica ainda mais concreta quando se olha para os percursos de grafos, que você estuda mais à frente no curso.
Escolher a estrutura é pensar como projetista. Precisa desfazer, voltar ou lembrar o último? Pilha.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
A pergunta que decide
Depois de aprender pilha e fila, o passo de projetista é saber escolher entre elas. E a escolha não é sobre qual é melhor, porque nenhuma é melhor em geral. É sobre qual comportamento o problema pede. Existe uma pergunta única que quase sempre decide: o problema quer atender o elemento mais recente ou o mais antigo? Se ele quer voltar ao que aconteceu por último, desfazer a última ação, retomar de onde parou, a resposta é a pilha, porque ela devolve o último que entrou. Se ele quer respeitar a ordem em que as coisas chegaram, atender quem esperou mais, processar na sequência, a resposta é a fila, porque ela devolve o primeiro que entrou.
Os exemplos ajudam a fixar. O botão desfazer de um editor guarda as ações numa pilha: a última coisa que você fez é a primeira a ser desfeita, comportamento LIFO puro. O botão voltar do navegador é a mesma ideia: você volta primeiro para a página mais recente. Já a impressora compartilhada usa fila: imprime na ordem em que os documentos chegaram, sem privilegiar ninguém. O suporte que atende clientes por ordem de mensagem usa fila. Sempre que você bate o olho num problema e pensa último ou mais recente, pense pilha; quando pensa primeiro, mais antigo ou justo, pense fila.
Duas estruturas, dois percursos de grafo
A escolha entre pilha e fila fica ainda mais concreta quando se olha para os percursos de grafos, que você estuda mais à frente no curso. Para explorar um mapa de pontos conectados, existem duas estratégias clássicas. A busca em largura visita os pontos por camadas, os mais próximos primeiro, e para isso usa uma fila: os vizinhos vão para o fim e são visitados na ordem em que foram descobertos. A busca em profundidade mergulha o mais fundo possível por um caminho antes de voltar, e para isso usa uma pilha: o último ponto descoberto é o próximo a ser explorado, e quando o caminho acaba, ela volta ao anterior. É o exemplo mais elegante de como a estrutura escolhida muda o comportamento inteiro do algoritmo.
// Mesma exploração, estruturas diferentes:
// Busca em largura (BFS) usa FILA -> visita por camadas
fronteira <- fila_vazia()
enfileirar(fronteira, inicio)
// ... a cada passo: desenfileira a FRENTE (o mais antigo)
// Busca em profundidade (DFS) usa PILHA -> mergulha fundo
fronteira <- pilha_vazia()
empilhar(fronteira, inicio)
// ... a cada passo: desempilha o TOPO (o mais recente)Trocar a fila por uma pilha muda a busca de por camadas (BFS) para em profundidade (DFS). A estrutura define o percurso.
🎮 Jogo da aula
Pilha ou fila para cada caso?
Classifique cada situação na estrutura mais adequada: pilha, que atende o último a chegar, ou fila, que atende o primeiro.
Escolher a estrutura é pensar como projetista
Escolher entre pilha e fila é um exemplo pequeno de uma habilidade grande: casar a estrutura de dados com o problema, em vez de sair codificando. Um bom programador, antes de escrever a solução, pergunta que forma o dado tem e que comportamento o problema exige. As duas estruturas deste começo de curso já treinam esse olhar, e o padrão se repete com as próximas: a lista ligada, a árvore, o grafo, a tabela hash. Cada uma resolve bem um tipo de problema e mal os outros. Reconhecer a pilha e a fila escondidas num enunciado, como você fez nesta aula, é o primeiro passo para projetar soluções em vez de só remendar código.
Teste rápido
Um editor precisa de um botão desfazer, que sempre reverte a última ação feita primeiro. Qual estrutura é a certa?
Perguntas frequentes
- Qual é a pergunta mais rápida para escolher entre pilha e fila?
- O problema quer o elemento mais recente ou o mais antigo? Se quer o último que chegou (desfazer, voltar, retomar), é pilha. Se quer o primeiro que chegou (atender por ordem, imprimir na sequência, ser justo), é fila. Essa única pergunta resolve a maioria dos casos sem precisar de mais análise.
- Por que o botão desfazer usa pilha e não fila?
- Porque desfazer precisa reverter a última ação primeiro. Você digita, formata, apaga; ao desfazer, quer voltar o apagar antes do formatar. Isso é LIFO: o último a entrar é o primeiro a sair, o comportamento da pilha. Uma fila desfaria a ação mais antiga primeiro, o que seria o oposto do esperado.
- Por que a busca em largura usa fila e a em profundidade usa pilha?
- A busca em largura quer visitar os pontos mais próximos primeiro, então guarda os descobertos numa fila e atende na ordem de descoberta (FIFO), avançando por camadas. A busca em profundidade quer mergulhar fundo por um caminho, então usa uma pilha e sempre explora o ponto descoberto mais recente (LIFO), voltando quando o caminho acaba.
- Existe problema que dá para resolver com as duas?
- Existe, mas o resultado muda. Explorar um grafo funciona com fila ou com pilha, só que a fila dá uma busca em largura e a pilha dá uma em profundidade, com ordens de visita diferentes. Nesses casos, a escolha depende do que você quer: caminho mais curto em passos pede fila; ir fundo por um ramo pede pilha.
- A fila de prioridade entra nessa escolha também?
- Entra, como uma terceira opção. Se a ordem de saída depende de urgência, e não só de chegada ou de recência, a fila de prioridade é a escolha. O guia mental fica: recência pede pilha, cronologia justa pede fila, e importância variável pede fila de prioridade. Cada uma para um tipo de ordem.
- Escolher a estrutura antes de codar vale a pena mesmo?
- Vale muito. Escolher a estrutura errada leva a código complicado que luta contra o problema; escolher a certa deixa a solução quase óbvia. Parar um minuto para perguntar que forma o dado tem e que ordem o problema exige poupa horas de remendo depois. É a diferença entre projetar e improvisar.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.