Pilha:
A forma mais geral de uma lista permite a inserção ou eliminação de um elemento em qualquer posição na lista. Se restringirmos a ocorrência de inserção e eliminação a uma extremidade da lista, por exemplo, extremidades superiores, então temos uma estrutura de dados chamada de pilha.
Utilizando a terminologia de pilhas, operações de inserção e eliminação são comumente citadas como operações “push” e “pop”, respectivamente. O único elemento diretamente acessível de uma pilha é seu elemento superior. O elemento menos acessível é seu elemento inferior.
Desde que as operações de inserção e eliminação são executadas na mesma extremidade da pilha (por exemplo, na extremidade superior), os elementos podem ser removidos somente na ordem oposta a que foram inseridos.
Este interessante fenômeno é conhecido como LIFO. LIFO é um acrônimo para a expressão inglesa Last In, First Out que, em português significa último a entrar, primeiro a sair.
Um exemplo comum de pilha, que permite a seleção de seu elemento superior, é a pilha de pratos num restaurante. Os pratos em pilha fazem com que a pessoa tenha acesso ao prato superior, à remoção de um prato superior faz com que a pessoa tenha acesso ao próximo prato, se colocado um novo prato na pilha, esse será o primeiro a sair.
Em Java, já existe a classe para o TAD pilha, que é a java.util.Stack.
Os métodos disponíveis nesta classe, entre outros, são: push(), pop(), equivalentes a empilha() e desempilha() e peek(), equivalente a topo(), tamanho() e vazia().
Os métodos pop() e peek() lançam a exceção StackEmptyException se a pilha estiver vazia quando eles são chamados.
- Outros métodos
- size(): retorna o número de objetos da pilha
- isEmpty(): retorna true se a pilha estiver vazia
- top(): retorna, mas não remove, o objeto do topo da pilha, retornando um erro se a pilha estiver vazia
Exemplo simples:
|
Operação |
Conteúdo da Pilha |
Saida |
| Inserir X | X | - |
| Inserir Y | X Y | - |
| Inserir Z | X Y Z | - |
| Remover | X Y | Z |
| Inserir W | X Y W | - |
| Remover | X Y | W |
| Remover | X | Y |
| Remover | X | |
| Remover | erro |
Traduzindo a tabela em linguagem java.
import java.util.Stack;
/**
* Esta classe demonstra como funciona uma pilha em java
*
* @author Nico
*
* @since 20 MAIO, 2009
*
*/
public class TestarUmaStack {
public static void main(String[] args) {
// DECLARANDO NOSSOS ELEMENTOS/OBJETOS
String nico = “Nico”, kawano = “Kawano”, gaucho = “Gaucho”, erick = “Erick”, cris = “Cris”, junior = “Junior”, silvio = “Silvio”, jean = “Jean”;
// DECLARANDO A PILHA
Stack<String> nossaPilha = new Stack<String>();
// Passo 1: Incrementar Nico
nossaPilha.push(nico);
// Passo 2: Incrementar Kawano
nossaPilha.push(kawano);
// Passo 3: Incrementar Gaucho e Cris
nossaPilha.push(gaucho);
nossaPilha.push(cris);
// Passo 4: Decrementar elemento Cris do topo
nossaPilha.pop();
// Passo 5: Incrementar Erick
nossaPilha.push(erick);
// Passo 6: Incrementar Jean e Junior
nossaPilha.push(jean);
nossaPilha.push(junior);
// Passo 7: Substituir elemento na pilha. Jean por Silvio!
nossaPilha.set(4, silvio);
// EXIBINDO INFORMAÇÕES SOBRE A PILHA
if (nossaPilha.isEmpty()) {
System.out.println(“A PILHA ESTÁ VAZIA!”);
} else {
System.out
.println(“NOSSA PILHA DO GRUPO…\n\nElemento\tÍndice\n———————-”);
for (int i = nossaPilha.size() – 1; i > -1; i–) {
System.out.println(nossaPilha.get(i) + “\t\t” + i);
}
System.out.println(“\nNÚMERO DE ELEMENTOS: “ + nossaPilha.size());
System.out.println(“ELEMENTO NO TOPO: \”" + nossaPilha.peek()
+ “\” no índice “ + nossaPilha.indexOf(nossaPilha.peek()));
}
}
}
Resultado:
NOSSA PILHA DO GRUPO…
Elemento Índice
———————-
Junior 5
Silvio 4
Erick 3
Gaucho 2
Kawano 1
Nico 0
NÚMERO DE ELEMENTOS: 6
ELEMENTO NO TOPO: “Junior” no índice 5
Arquivado em: Java, POO | Etiquetado: Java, POO | Deixar um comentário »
