Uma pilha, ou stack, é uma estrutura de dados linear que segue o princípio LIFO (Last In, First Out), onde o último elemento adicionado é o primeiro a ser removido. As pilhas são úteis em diversas aplicações, como controle de chamadas em funções recursivas, verificações de parênteses balanceados e navegadores web (para armazenar o histórico de navegação).
Em Java, podemos implementar pilhas de duas maneiras principais: usando a classe Stack
fornecida na biblioteca Java e utilizando outras estruturas de dados, como LinkedList
ou ArrayDeque
.
Operações Básicas em uma Pilha
- push(element): Adiciona um elemento no topo da pilha.
- pop(): Remove e retorna o elemento no topo da pilha.
- peek(): Retorna o elemento no topo sem removê-lo.
- isEmpty(): Verifica se a pilha está vazia.
Implementação Usando a Classe Stack
A classe Stack
em Java faz parte do pacote java.util
e oferece métodos úteis para manipulação de pilhas. Vamos ver como ela funciona:
import java.util.Stack;
public class ExemploPilha {
public static void main(String[] args) {
Stack<Integer> pilha = new Stack<>();
// Adicionando elementos à pilha
pilha.push(10);
pilha.push(20);
pilha.push(30);
System.out.println("Pilha após push: " + pilha);
// Visualizando o elemento do topo com peek
System.out.println("Elemento no topo: " + pilha.peek());
// Removendo elementos da pilha com pop
System.out.println("Elemento removido: " + pilha.pop());
System.out.println("Pilha após pop: " + pilha);
// Verificando se a pilha está vazia
System.out.println("A pilha está vazia? " + pilha.isEmpty());
}
}
Saída Esperada
Pilha após push: [10, 20, 30]
Elemento no topo: 30
Elemento removido: 30
Pilha após pop: [10, 20]
A pilha está vazia? false
Explicação do Código
- Criação da Pilha: Uma instância de
Stack
é criada para armazenar valores inteiros. - Push: Elementos são adicionados com o método
push
. - Peek e Pop:
peek
permite visualizar o topo da pilha sem remover o elemento, enquantopop
o remove. - isEmpty: Verifica se a pilha está vazia.
Implementação com ArrayDeque
A classe ArrayDeque
é preferida em muitos casos por ser mais rápida e consumir menos memória do que a Stack
. Vamos ver um exemplo de uso:
import java.util.ArrayDeque;
import java.util.Deque;
public class ExemploPilhaArrayDeque {
public static void main(String[] args) {
Deque<String> pilha = new ArrayDeque<>();
// Adicionando elementos à pilha
pilha.push("Primeiro");
pilha.push("Segundo");
pilha.push("Terceiro");
System.out.println("Pilha após push: " + pilha);
// Removendo o elemento do topo
System.out.println("Elemento removido: " + pilha.pop());
System.out.println("Pilha após pop: " + pilha);
// Visualizando o elemento do topo
System.out.println("Elemento no topo: " + pilha.peek());
}
}
Saída Esperada
Pilha após push: [Terceiro, Segundo, Primeiro]
Elemento removido: Terceiro
Pilha após pop: [Segundo, Primeiro]
Elemento no topo: Segundo
Implementação com LinkedList
Outra alternativa para criar uma pilha é usar a classe LinkedList
.
import java.util.LinkedList;
public class ExemploPilhaLinkedList {
public static void main(String[] args) {
LinkedList<Double> pilha = new LinkedList<>();
// Adicionando elementos
pilha.push(3.14);
pilha.push(1.618);
pilha.push(2.718);
System.out.println("Pilha após push: " + pilha);
// Removendo o elemento do topo
System.out.println("Elemento removido: " + pilha.pop());
System.out.println("Pilha após pop: " + pilha);
// Exibindo o elemento no topo
System.out.println("Elemento no topo: " + pilha.peek());
}
}
Saída Esperada
Pilha após push: [2.718, 1.618, 3.14]
Elemento removido: 2.718
Pilha após pop: [1.618, 3.14]
Elemento no topo: 1.618
Conclusão
As pilhas são estruturas de dados simples, porém poderosas, e a linguagem Java oferece várias maneiras de implementá-las. A escolha entre Stack
, ArrayDeque
e LinkedList
depende das necessidades específicas do projeto e das operações de desempenho esperadas.
Deixe um comentário