LIFO — Last In, First Out
Pilha: acesso restrito ao topo
A pilha é um tipo abstrato no qual o último elemento inserido é o primeiro que pode ser removido.
Contrato da pilha
- push(valor) insere um elemento no topo.
- pop() remove e retorna o elemento do topo.
- peek()/top consulta o topo sem removê-lo.
- is_empty() informa se não há elementos.
Regra, não formato de memória
LIFO descreve a ordem das operações. A pilha pode usar um array, um array redimensionável ou nós encadeados.
Invariante: push e pop acontecem sempre na mesma extremidade lógica, o topo.
Duas implementações possíveis
| Implementação | Como representa o topo | push/pop |
|---|---|---|
| Array | Último índice ocupado; não há ponteiro next em cada posição. | O(1), amortizado no array redimensionável. |
| Lista encadeada | Uma referência top aponta para o primeiro nó; cada nó aponta para o nó abaixo. | O(1). |
Laboratório: pilha encadeada
Nesta representação específica, top aponta para a célula superior. O campo next de cada célula aponta para a célula imediatamente abaixo.
Push e pop no topo
Operação
Ordem da base ao topo
Python: list como pilha
A documentação do Python recomenda append() e pop() no final da lista para obter o comportamento LIFO.
Pythonarray redimensionável
pilha = []
pilha.append(2) # push
pilha.append(3)
pilha.append(4)
topo = pilha[-1] # peek: 4
saiu = pilha.pop() # pop: 4
print(pilha) # [2, 3]
Python: pilha encadeada
Aqui o desenho do laboratório aparece diretamente no código: cada nó possui value e next.
Pythonnós encadeados
class Node:
def __init__(self, value, next_node=None):
self.value = value
self.next = next_node
class Stack:
def __init__(self):
self.top = None
def push(self, value):
# O novo nó aponta para o topo antigo e passa a ser o topo.
self.top = Node(value, self.top)
def pop(self):
if self.top is None:
raise IndexError("pilha vazia")
# Guardamos o valor antes de descartar a referência do nó removido.
value = self.top.value
self.top = self.top.next
return value
Referências usadas
- NIST — stack: definição LIFO e operações fundamentais.
- Python — Using Lists as Stacks:
appendepop.