Pilhas (stacks)
Uma pilha (stack) é uma estrutura de dados do tipo LIFO (Last-In, First-Out), onde o último elemento inserido é o primeiro a ser removido. Em C++, pode-se implementar pilhas de diversas formas: manualmente com arrays ou listas, ou utilizando a biblioteca padrão (std::stack).
1. Usar a biblioteca padrão (std::stack)
Inclua o cabeçalho <stack> e use os métodos principais:
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> pilha;
// Inserir elementos (push)
pilha.push(10);
pilha.push(20);
pilha.push(30);
// Tamanho da pilha
cout << "Tamanho da pilha: " << pilha.size() << endl;
// Aceder ao topo
cout << "Topo da pilha: " << pilha.top() << endl;
// Remover elemento do topo (pop)
pilha.pop();
cout << "Novo topo: " << pilha.top() << endl;
cout << "Tamanho após pop: " << pilha.size() << endl;
// Esvaziar a pilha
while (!pilha.empty()) {
cout << "Removendo: " << pilha.top() << endl;
pilha.pop();
}
return 0;
}
O método
pushinsere,popremove o topo,topacessa o topo,sizeretorna o tamanho eemptyverifica se está vazia.
2. Implementar pilha manualmente com array
Exemplo de implementação básica:
#include <iostream>
#define TAMANHO 5
using namespace std;
typedef struct {
int topo;
int itens[TAMANHO];
} PILHA;
void iniciaPilha(PILHA &p) {
p.topo = -1;
}
bool pilhaVazia(PILHA p) {
return p.topo == -1;
}
bool pilhaCheia(PILHA p) {
return p.topo == TAMANHO - 1;
}
void empilha(PILHA &p, int x) {
if (!pilhaCheia(p))
p.itens[++p.topo] = x;
else
cout << "Pilha cheia!" << endl;
}
int desempilha(PILHA &p) {
if (!pilhaVazia(p))
return p.itens[p.topo--];
else {
cout << "Pilha vazia!" << endl;
return -1;
}
}
int main() {
PILHA s;
iniciaPilha(s);
empilha(s, 5);
empilha(s, 10);
cout << "Desempilhado: " << desempilha(s) << endl;
cout << "Desempilhado: " << desempilha(s) << endl;
return 0;
}
Essa implementação mostra as funções básicas: iniciar, empilhar, desempilhar, checar se está cheia ou vazia.
3. Principais operações de uma pilha
| Operação | Descrição | Exemplo em C++ padrão |
|---|---|---|
| push | Insere elemento no topo | pilha.push(valor); |
| pop | Remove elemento do topo | pilha.pop(); |
| top | Consulta o elemento do topo | pilha.top(); |
| size | Retorna o número de elementos | pilha.size(); |
| empty | Verifica se a pilha está vazia | pilha.empty(); |
Observações
- Pilhas são úteis para problemas como inversão de dados, avaliação de expressões e controle de chamadas de funções.
- A implementação manual permite maior controle, mas o uso de
std::stacké mais prático para a maioria dos casos.
