Estrutura de dados é uma forma organizada de armazenar informações no computador, para que elas possam ser acessadas, modificadas e utilizadas de maneira mais eficiente. Ela define como os dados se relacionam entre si e como o programa pode trabalhar com esses dados para resolver problemas de forma mais rápida e organizada. Dentro dessa matéria de Estrutura de dados existe diversos conhecimentos importantes e um deles é a Pilha, vamos abordar sobre esse assunto no decorrer do artigo.
Neste artigo você vai aprender:
O que é uma pilha
- Conceito de LIFO
- Principais operações
- Onde pilhas são usadas na prática
- Implementação em Java (duas formas: manual e com Stack)
Vantagens, desvantagens e quando usar.
O que é uma Pilha?
Uma pilha é uma estrutura de dados linear que segue o princípio:
LIFO – Last In, First Out
O último a entrar é o primeiro a sair.
Visualmente, pense em uma pilha de pratos:

Quando você coloca um prato novo, ele vai para o topo.
Quando você retira um prato, sempre sai o que está no topo.
Como funciona uma Pilha em Estrutura de Dados (parte Teórica)
Uma pilha permite apenas interações com o topo:
Descrição das Operações:
push() Adiciona um elemento no topo
pop() Remove o elemento do topo
peek() Retorna o elemento do topo sem remover
isEmpty() Verifica se a pilha está vazia
size() Retorna o tamanho
Tudo é feito sempre no topo e não existe acesso direto ao meio da pilha.
Onde As Pilhas São Aplicadas na Vida Real de um Programador?
As pilhas estão em muitos sistemas:
Quando você navega pela internet, cada página visitada é empilhada.
Entrou em uma página → push()
Clicou em “voltar” → pop()
O navegador mantém duas pilhas: histórico e futuro.
——————————————————————————————————————–
⌨️ Ctrl+Z / Ctrl+Y (Undo e Redo)
Em editores como VS Code, Word, Photoshop, Figma…
Cada ação que você faz vai para uma pilha de ações desfeitas.
A pilha permite desfazer e refazer na ordem exata.
——————————————————————————————————————–
🧬 Pilha de Execução (Call Stack)
Toda linguagem de programação usa pilha para controlar chamadas de funções.
Função A chama B → empilha B
B chama C → empilha C
C termina → desempilha
Depois volta para B, e assim por diante
É assim que a JVM e outras linguagens controlam recursão.
——————————————————————————————————————–
🧮 Avaliação de Expressões Matemáticas
Compiladores usam pilhas para interpretar expressões.
Exemplo:
(a + b) * (c – d)
Parênteses, operadores e operandos são empilhados e processados na ordem correta.
——————————————————————————————————————–
📦 Navegação em Aplicativos (Fluxo de Telas)
Apps como os feitos no Android usam pilhas para controlar telas:
Abriu nova tela → push()
Apertou “voltar” → pop()
——————————————————————————————————————–
🎲 Sistemas de Jogos (Histórico e Ações)
Jogos usam pilhas para:
- desfazer movimentos
- pilha de estados
- lógica de turnos
Criando uma Pilha Manual em Java
Essa implementação reforça bem o funcionamento interno.
public class Pilha {
private int[] elementos;
private int topo;
public Pilha(int tamanho) {
elementos = new int[tamanho];
topo = -1; // indica pilha vazia
}
public void push(int valor) {
if (topo == elementos.length - 1) {
throw new RuntimeException("Pilha cheia!");
}
elementos[++topo] = valor;
}
public int pop() {
if (isEmpty()) {
throw new RuntimeException("A pilha está vazia!");
}
return elementos[topo--];
}
public int peek() {
if (isEmpty()) {
throw new RuntimeException("A pilha está vazia!");
}
return elementos[topo];
}
public boolean isEmpty() {
return topo == -1;
}
public int size() {
return topo + 1;
}
}
Testando a pilha:

Usando a Classe Stack do Java para criar uma Pilha
Além da implementação manual, o Java já oferece uma classe pronta:

Simples, direto e eficiente para a maioria dos casos.
Vantagens e Desvantagens de usar uma Pilha em Estrutura de Dados
✔️ Vantagens
- Estrutura muito simples
- Operações rápidas (O(1))
- Ótima para controle de fluxo e reversões
- Muito usada na JVM
❌ Desvantagens
- Acesso limitado (somente topo)
- Não é adequada quando você precisa acessar posições intermediárias
Conclusão
A pilha (Stack) é uma das estruturas de dados mais importantes para quem está começando a programar. Simples, eficiente e presente em inúmeros sistemas, ela reforça conceitos fundamentais como acesso restrito, ordem lógica e fluxo de execução.
Quer aprender a linguagem Java do absoluto zero mesmo que você nunca tenha programado na sua vida? Clique aqui e aprenda Java do Zero:
