Pilha
Uma pilha (stack) é uma estrutura de dados linear que organiza os elementos de acordo com o princípio LIFO — Last In, First Out, ou seja, o último elemento inserido é o primeiro a ser removido.
Um exemplo do cotidiano é uma pilha de pratos:
┌─────────┐
│ Prato │ ← último a entrar
├─────────┤
│ Prato │
├─────────┤
│ Prato │ ← primeiro a entrar
└─────────┘
↑
topoSe colocarmos um novo prato na pilha, ele ficará no topo.
Quando retirarmos um prato, será retirado primeiro aquele que está no topo.
Entrada: A → B → C
Saída: C → B → AEssa característica define o comportamento de uma pilha: o elemento que entrou por último é o primeiro a sair.
Operações de uma pilha
As operações fundamentais de uma pilha são:
- Push — adiciona um elemento ao topo.
- Pop — remove o elemento do topo.
- Peek/Top — consulta o elemento do topo sem removê-lo.
- isEmpty — verifica se a pilha está vazia.
Em Python, uma list pode ser utilizada para representar uma pilha.
Criando uma pilha
Podemos criar uma pilha utilizando uma lista vazia:
pilha = []Nesse momento, a pilha não possui nenhum elemento.
Pilha:
┌─────────┐
│ │
└─────────┘Push — adicionar elementos
Para adicionar um elemento ao topo da pilha, podemos utilizar append().
pilha = []
pilha.append("A")
pilha.append("B")
pilha.append("C")
print(pilha)Resultado:
["A", "B", "C"]O elemento "C" está no topo da pilha:
┌─────────┐
│ C │ ← topo
├─────────┤
│ B │
├─────────┤
│ A │
└─────────┘Cada chamada de append() adiciona um novo elemento ao topo.
Pop — remover elementos
Para remover o elemento do topo, utilizamos pop().
pilha = ["A", "B", "C"]
elemento = pilha.pop()
print(elemento)
print(pilha)Resultado:
C
["A", "B"]O elemento "C" foi o último a entrar e, portanto, foi o primeiro a sair.
Podemos continuar removendo:
pilha.pop()Remove "B".
Depois:
pilha.pop()Remove "A".
A sequência de remoção será:
Entrada: A → B → C
Saída: C → B → APeek — consultar o topo
Para consultar o elemento que está no topo sem removê-lo, podemos acessar o último elemento da lista utilizando o índice -1.
pilha = ["A", "B", "C"]
print(pilha[-1])Resultado:
CO elemento continua na pilha:
print(pilha)Resultado:
["A", "B", "C"]Verificar se a pilha está vazia
Podemos verificar se uma pilha possui elementos utilizando uma estrutura condicional.
pilha = []
if not pilha:
print("A pilha está vazia.")Resultado:
A pilha está vazia.Quando a pilha possui elementos:
pilha = ["A", "B"]
if pilha:
print("A pilha possui elementos.")Resultado:
A pilha possui elementos.Exemplo completo
O exemplo abaixo demonstra as principais operações de uma pilha:
pilha = []
# Push
pilha.append("A")
pilha.append("B")
pilha.append("C")
print("Pilha:")
print(pilha)
# Peek
print("\nTopo:")
print(pilha[-1])
# Pop
elemento = pilha.pop()
print("\nElemento removido:")
print(elemento)
print("\nPilha após remoção:")
print(pilha)
# Verificar se está vazia
if not pilha:
print("\nA pilha está vazia.")
else:
print("\nA pilha possui elementos.")Resultado:
Pilha:
["A", "B", "C"]
Topo:
C
Elemento removido:
C
Pilha após remoção:
["A", "B"]
A pilha possui elementos.Resumo
Uma pilha segue o princípio LIFO — Last In, First Out.
As principais operações são:
Push → adiciona no topo
Pop → remove do topo
Peek → consulta o topoEm Python, podemos utilizar uma list de maneira simples para representar uma pilha:
pilha = []
pilha.append(valor) # Push
pilha.pop() # Pop
pilha[-1] # PeekA ideia fundamental é simples:
Em uma pilha, o último elemento que entra é o primeiro elemento que sai.