A pilha armazena apenas a posição de uma de suas extremidades (chamada topo), que é o único local onde são realizadas todas as operações de entrada e saída. A operação de entrada de dados (sempre no topo da pilha ) é chamada push e a retirada (também sempre do topo) é chamada pop.
É uma estrutura de dados de tamanho variável, sendo que elementos são incluídos (empilhados) e/ou removidos (desempilhados) apenas pela extremidade topo.
Pilhas são listas lineares com disciplina de acesso LIFO (Last In, First Out), ou seja, o último elemento a ser inserido é o primeiro a ser removido.
- Alocação Estática: Em geral através de arranjo ou vetor;
- Alocação Dinâmica: Utilizando ponteiro.
Teste de pilha vazia;
- Criação da pilha;
- Empilhamento;
- Desempilhamento;
- Acesso aos elementos da pilha;
- ✓ Topo
- ✓ Tamanho
Considere a definição do tipo Pilha abaixo:
public class No {
int dado;
No proximo;
}
No topo;
public boolean pilhaVazia(){
if(this.topo == null) {
return true;
}else{
return false;
}
}
No topo;
public void push(int e){
No elemento = new No();
elemento.dado = e;
if (pilhapVazia() == true){
topo = elemento;
}else{
elemento.proximo = top;
topo = proximo;
}
}
No topo;
tipo pop() {
se (pilhaVazia() == verdadeiro) {
exceção(“Não há elementos para desempilhar”);
}
tipo valor = topo.dado;
topo = topo.proximo;
retorne valor;
}
public int pop(){
if(pilhaVazia() == true) {
System.out.print("Zero elementos!");
}
int valor = topo.dado;
top = topo.proximo;
return valor;
}
Como estamos usando uma lista simplesmente encadeada podemos acessar todos os elementos da pilha, a partir do topo, sem ter a necessidade de desempilhá-los.
No topo;
public int topo() {
if(pilhaVazia() == true){
System.out.print("Zero elementos!");
}
int valor = topo.dado;
return valor;
}
No topo;
tipo tamanho() {
int cont = 0;
se (pilhaVazia() == falso) {
No auxiliar = topo;
cont = 1;
enquanto (auxiliar.proximo != null) {
cont = cont + 1;
auxiliar = auxiliar.proximo;
}
}
retorne cont;
}
public class exemplo {
public static void main(String[] args) {
Pilha p = new Pilha();
p.push(5);
p.push(4);
p.push(3);
int topo = p.topo();
System.out.println(“Topo:”+topo);
int tamanho = p.tamanho();
System.out.println(“Tamanho da Pilha:”+tamanho);
...
}
}
- Implemente uma função que imprima os elementos de uma Pilha.
- Faça uma função que inverta a ordem dos elementos da Pilha.
- Faça uma função para retornar o número de elementos da Pilha que possuem valor ímpar.
- Faça uma função para retornar o número de elementos da Pilha que possuem valor par. ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ