Pilhas e Filas em Estrutura de Dados
As pilhas e filas são duas das estruturas de dados mais utilizadas na programação. Presentes em sistemas, algoritmos e até no funcionamento de hardware, elas são fundamentais para organizar e processar informações de forma eficiente.
Neste artigo, vamos entender o que são pilhas e filas, suas regras de funcionamento, como são implementadas e quais operações podem ser realizadas.
Pilhas: Definição
Uma pilha é uma estrutura de dados que segue a regra LIFO (Last In, First Out) — o último elemento que entra é o primeiro a sair. Imagine uma pilha de pratos: você só consegue retirar o prato que está no topo.
Características principais:
- Apenas o elemento no topo pode ser acessado diretamente.
- Inserções e remoções acontecem no mesmo ponto (o topo).
- Usada quando a ordem de processamento precisa ser invertida em relação à entrada.
Aplicações comuns:
- Funções recursivas (armazenamento da pilha de chamadas).
- Desfazer/refazer ações em editores de texto.
- Análise de expressões matemáticas.
Pilhas: Implementação e Operações
As pilhas podem ser implementadas de várias formas, sendo as mais comuns:
- Usando arrays (vetores) – mais simples, mas com tamanho fixo.
- Usando listas ligadas – flexível, permite tamanho dinâmico.
Operações básicas:
- Push – insere um elemento no topo da pilha.
- Pop – remove o elemento do topo.
- Peek/Top – visualiza o elemento no topo sem removê-lo.
- isEmpty – verifica se a pilha está vazia.
Exemplo em Python:
pilha = []
pilha.append(1) # Push
pilha.append(2)
print(pilha.pop()) # Pop -> 2
Filas: Definição
A fila é uma estrutura de dados que segue a regra FIFO (First In, First Out) — o primeiro elemento que entra é o primeiro a sair.
O exemplo clássico é uma fila de atendimento: quem chega primeiro é atendido antes.
Características principais:
- Inserções acontecem no final (cauda).
- Remoções acontecem no início (cabeça).
- Preserva a ordem original de chegada dos elementos.
Aplicações comuns:
- Controle de requisições em servidores.
- Filas de impressão.
- Processos em sistemas operacionais.
Filas: Implementação e Operações
Formas comuns de implementar filas:
- Usando arrays – requer controle dos índices de início e fim.
- Usando listas ligadas – flexível, permite crescimento dinâmico.
- Usando estruturas prontas da linguagem – por exemplo,
queue.Queue
no Python.
Operações básicas:
- isEmpty – verifica se a fila está vazia.
- Enqueue – adiciona elemento no final.
- Dequeue – remove elemento do início.
- Front – acessa o elemento do início sem removê-lo.
Exemplo em Python:
from collections import deque
fila = deque()
fila.append(1) # Enqueue
fila.append(2)
print(fila.popleft()) # Dequeue -> 1
Pilhas e Filas: Comparação
Característica | Pilha (Stack) | Fila (Queue) |
---|---|---|
Regra | LIFO | FIFO |
Inserção | Topo | Final |
Remoção | Topo | Início |
Exemplo real | Pilha de pratos | Fila de banco |
Ambas são tipos abstratos de dados que podem ser implementados de diferentes maneiras. A escolha entre pilha ou fila depende do problema a ser resolvido.
Por exemplo, um algoritmo de navegação de páginas de internet (botões voltar e avançar) normalmente usa pilha, enquanto um sistema de impressão em rede usa fila.
Conclusão
Dominar o funcionamento de pilhas e filas em estrutura de dados é essencial para qualquer programador. Esses conceitos aparecem tanto em problemas simples quanto em sistemas complexos, e compreender suas regras e implementações ajuda a escrever código mais eficiente e organizado.
Ao aplicar esses conceitos, lembre-se: escolha a estrutura certa para cada situação e utilize implementações que otimizem memória e desempenho.