SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Estrutura de Dados
(Aula 03)
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
1. Estrutura de Dados
8.1 Pilha
8.2 Fila
8.3 Lista
8.4 Árvores de pesquisa
http://www.inf.ufsc.br/~ronaldo/ine5384/15-
OrdenacaoDados.pdf
Tema da aula
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Introdução
o Até o momento:
o Vetores estáticos;
o Com tamanho definido;
o Acesso sequêncial;
o De agora em diante:
o Estruturas dinâmicas;
o Com tamanho indefinido;
0 1 2 3 4 5
3 8 7 9 0 3
3 8 7 9 0 3
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha
(Stack)
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Estrutura de dados de pilha
o É a estrutura de dados mais simples;
o É implementada diretamente pelo hardware das
máquinas modernas;
o Idéia fundamental da pilha é que todo o acesso a
seus elementos é feito através do seu topo;
o O único elemento que pode ser removido é o topo;
o Com esse fundamento faz com que os elementos da
pilha sejam retirados de ordem inversa;
o LIFO – Last In First Out
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Funcionamento de uma pilha
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Exemplo de uma aplicação com uso de
pilha
http://www.gameson.com.br/Jogos-Online/ClassicoPuzzle/Torre-de-
Hanoi.html
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Elementos de uma pilha
o criar uma pilha vazia;
o inserir um elemento no topo de uma pilha;
o remover o elemento que está no topo de pilha;
o verificar se a pilha esta vazia;
o verificar o elemento que esta no topo da pilha;
o zerar a pilha;
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Elementos de uma pilha
oPilha com vetores
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
TDA de uma pilha
oEmpilha(elemento) – insere um objeto no topo da pilha
•Entrada = objeto saida = nenhum
oDesempilhar() - retira um objeto do topo de pilha e o retorna,
deverá ter uma proteção pois a pilha não pode estar vazia
•Entrada = nenhum saída = objeto
oTamanho() - retorna o número de objetos dentro de uma pilha
•Entrada = nenhuma saída = inteiro
oVazia() - retorna um booleano indicando se a pilha está vazia
•Entrada = nenhuma saída = booleano
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
TDA de uma pilha
oTopo() - retorna o objeto que está no topo de uma pilha,
deverá ter uma proteção para a pilha vazia;
•Entrada = nenhuma saída = objeto
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha pronta em JAVA
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha pronta em JAVA
o Em Java já temos uma classe para o TDA pilha, portanto
basta importarmos o:
•java.util.Stack
o Os métodos push(obj) e pop() são equivalentes a empilha(o)
e desempilha() respectivamente
o O método peek() é equivalente ao método topo(), tamanho()
e vazia();
o Os métodos pop() e peek() laçam a exceção
StackEmptyException se a pilha estiver vazia
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha pronta em JAVA
package PilhaJava;
import java.util.EmptyStackException;
import java.util.Stack;
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha pronta em JAVA
Try{ // usou try pois a pilha pode estar vazia
Stack pilha = new Stack();
//cria uma pilha como se fosse um objeto genérico
. . .
}
catch(EmptyStackException e){
System.out.println("Pilha vazia");
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha pronta em JAVA
try{ // usou try pois a pilha pode estar vazia
. . .
pilha.push(1);
pilha.push(2);
System.out.println(pilha.peek());
pilha.pop();
System.out.println(pilha.peek());
pilha.pop();
System.out.println(pilha.peek());
}
catch(EmptyStackException e){
System.out.println("Pilha vazia");
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
package PilhaVetor;
public class PilhaVetor {
public static final int total = 1000;
private int capacidade;
private Object pilha[];
private int topo = -1;
public PilhaVetor(){}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
public PilhaVetor(int tam){
capacidade = tam;
pilha = new Object[capacidade];
}
// retorna a quantidade de elementos da // pilha
public int tamanho(){
return topo + 1;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
// empilha um certo elemento no topo da
// pilha
public void empilhar(Object elemento){
if(tamanho() == capacidade)
System.out.println("Pilha Cheia");
else
pilha[++topo] = elemento;
}
// informa se a pilha estah vazia ou nao
public boolean vazia(){
return(topo < 0);
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
// retira e retorna o elemento que estah
// no topo da pilha
public Object desempilhar(){
Object fora = null;
if(vazia())
System.out.println("Pilha Vazia");
else{
fora = pilha[topo];
pilha[topo] = null;
topo--;
}
return fora;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
// retorna o elemento que estah no topo
// de uma pilha
public Object verTopo(){
if(!vazia())
return pilha[topo];
else
return null;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
public static void main(String[] args) {
Dados a = new Dados("Ricardo", "Rua x", 34);
Dados b = new Dados("Maria", "Rua y", 60);
Dados c = new Dados("Joao", "Rua v", 19);
PilhaVetor pilha = new PilhaVetor(3);
pilha.empilhar(a);
pilha.empilhar(b);
pilha.empilhar(c);
Dados res = (Dados) pilha.verTopo();
System.out.println(res.getNome() + " - "
+ res.getEndereco() + " - "
+ res.getIdade());
pilha.desempilhar();
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Pilha com vetor
res = (Dados) pilha.verTopo();
System.out.println(res.getNome() + " - "
+ res.getEndereco() + " - "
+ res.getIdade());
pilha.desempilhar();
res = (Dados) pilha.verTopo();
if (res != null)
System.out.println(res.getNome() + " - "
+ res.getEndereco() + " - "
+ res.getIdade());
else
System.out.println("Pilha vazia");
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
TDA de uma pilha
Representação do nó ou célula
Representação da pilha
topo
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
TDA de uma pilha
public class No<T> {
private T valor;
private No<T> proximo;
public No(T valor, No<T> proximo) {
this.valor = valor;
this.proximo = proximo;
}
public No(){}
....
// alem disso temos os
// métodos de getters e
// setters
}
Representação do nó ou célula
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
TDA de uma pilha
ublic class Pilha<T> {
protected No<T> topo;
protected int tamanho;
public Pilha(){
tamanho = 0;
topo = null;
}
....
} Representação da pilha
topo
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Criar uma pilha e verificar pilha vazia
public Pilha(){
tamanho = 0;
topo = null;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Criar uma pilha e verificar pilha vazia
public boolean vazia(){
return topo == null;
}
public int tamanho(){
return tamanho;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Inserção na pilha (i)
1. Pré-requisito: pilha tem que estar criada e o próximo apontando
para NULL;
2. Criar um nó ou célula;
3. Atribuir o elemento ao campo info;
4. O próximo do nó criado será ligado ao para quem o topo esta apontando
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Inserção na pilha (ii)
5. Faz o topo apontar para o elemento que foi inserido
Próximo passo:
6. O próximo do nó criado será ligado ao para quem o topo esta apontando
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Inserção na pilha (iii)
5. Faz o topo apontar para o elemento que foi inserido
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Inserção na pilha (iii)
5. Faz o topo apontar para o elemento que foi inserido
void empilhar (T elemento){
No<T> aux = new No(null, null);
aux.setValor(elemento);
aux.setProximo(topo);
topo = aux;
tamanho++;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Remoção da pilha (i)
1. Pré-condição é que tenha elementos na pilha.
2. Auxiliar recebe o topo da pilha
3. O topo aponta para o próximo do auxiliar
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Remoção da pilha (i)
T desempilhar (){
No<T> aux = null;
T elemento = null;
if (vazia()) {
System.out.println("Pilha vazian");
}
else {
aux = topo;
elemento = topo.getValor();
topo = aux.getProximo();
tamanho--;
}
return elemento;
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Ver topo da pilha (i)
1. Pré-requisito é ter elementos na pilha.
2. Um nó auxiliar recebe o topo e depois apresenta o que tem como info;
void verTopo(){
No<T> aux = null;
if (!vazia()) {
aux = topo;
System.out.println("Topo: " + aux.getValor());
}
else{
System.out.println("Pilha vazian");
}
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Zerar pilha
public static void main(String[] args){
Pilha<Integer> p = new Pilha();
p.empilhar(1);
p.verTopo();
p.empilhar(2);
p.verTopo();
Integer res = p.desempilhar();
System.out.println("Retirado: " + res.toString());
p.verTopo();
res = p.desempilhar();
System.out.println("Retirado: " + res.toString());
p.verTopo();
}
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Exercícios
• Dado o TDA abaixo criar uma pilha para armazenar dos dados;
Contatos:
nome;
Endereco:
rua;
bairro;
cep;
numero;
Telefone:
fixo;
celular;
trabalho;
email;
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Exercícios
• Método principal
printf(“Menu”);
printf(“n1.Empilhar”);
printf(“n2.Desempilhar”);
printf(“n3.Ver Topo”);
printf(“n4.Zerar”);
printf(“n5.Sair”);
printf(“nDigite a opcao: ”);
scanf(“%d”, &opcao);
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Praticar
• Considerando uma Pilha vazia, quais são os comandos
necessários para a inserção do 1o nó ?
• Considerando uma Pilha não vazia, quais são os comandos
necessários para a exclusão de um nó ?
• Considerando uma Pilha não vazia, quais são os comandos
necessários para a inserção de um novo nó ?
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Praticar implementação
• Escreve um programa que utilizando uma pilha determina se
uma string é um palíndromo ou não, isto é, se pode ser lida da
mesma maneira para frente ou para trás.
• Implemente uma APLICAÇÃO que utilize uma pilha para
conversão de expressões da notação tradicional (infixa),
completamente parentizadas, para a e notação polonesa
reversa (pós-fixada).
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Praticar implementação
Implemente uma APLICAÇÃO que utilize uma pilha para
conversão de expressões da notação tradicional (infixa),
completamente parentizadas, para a e notação polonesa reversa
(pré-fixada).
INSTITUTO FEDERAL
TRIÂNGULO MINEIRO
Campus Uberlândia Centro
Fim da aula.....
ricardoboaventura@iftm.edu.br

Mais conteúdo relacionado

Mais procurados

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente EncadeadasLeinylson Fontinele
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisDaniel Brandão
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 

Mais procurados (20)

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
 
Aula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas CondicionaisAula03 PHP - Estruturas Condicionais
Aula03 PHP - Estruturas Condicionais
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
12 SQL - Junções / Join
12 SQL - Junções / Join12 SQL - Junções / Join
12 SQL - Junções / Join
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?
 
Linguagem C 09 Ponteiros
Linguagem C 09 PonteirosLinguagem C 09 Ponteiros
Linguagem C 09 Ponteiros
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 

Semelhante a Estruturas de Dados Pilha

Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Loiane Groner
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.pptJoberthSilva
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dadosRicardo Bolanho
 
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)Loiane Groner
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopJean Martina
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasLeinylson Fontinele
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 
Java - Introdução a Coleções e Generics
Java - Introdução a Coleções e GenericsJava - Introdução a Coleções e Generics
Java - Introdução a Coleções e GenericsSérgio Souza Costa
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaElaine Cecília Gatto
 

Semelhante a Estruturas de Dados Pilha (20)

Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Aula 8
Aula 8Aula 8
Aula 8
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
 
Pilha
PilhaPilha
Pilha
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Coleções do c
Coleções do cColeções do c
Coleções do c
 
Aula 9
Aula 9Aula 9
Aula 9
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Aula 10
Aula 10 Aula 10
Aula 10
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)
Estrutura de Dados e Algoritmos com Java #19-25: Filas (Queue)
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas EstáticasEstrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - Aula 06 - Pilhas Estáticas
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Java - Introdução a Coleções e Generics
Java - Introdução a Coleções e GenericsJava - Introdução a Coleções e Generics
Java - Introdução a Coleções e Generics
 
Programação Desktop: Revisão Core Java
Programação Desktop: Revisão Core JavaProgramação Desktop: Revisão Core Java
Programação Desktop: Revisão Core Java
 

Mais de Aparicio Junior

Mock test structure TOEFL ITP
Mock test structure TOEFL ITPMock test structure TOEFL ITP
Mock test structure TOEFL ITPAparicio Junior
 
Mock test reading TOEFL ITP
Mock test reading TOEFL ITPMock test reading TOEFL ITP
Mock test reading TOEFL ITPAparicio Junior
 
Mock Test Listening TOEFL ITP
Mock Test Listening TOEFL ITPMock Test Listening TOEFL ITP
Mock Test Listening TOEFL ITPAparicio Junior
 
General view of the TOEFL ITP
General view of the TOEFL ITPGeneral view of the TOEFL ITP
General view of the TOEFL ITPAparicio Junior
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
Banco de Dados - Junções Externas e internas
Banco de Dados - Junções Externas e internasBanco de Dados - Junções Externas e internas
Banco de Dados - Junções Externas e internasAparicio Junior
 
Aula sobre Programação Orientada a Objetos em Java
Aula sobre Programação Orientada a Objetos em JavaAula sobre Programação Orientada a Objetos em Java
Aula sobre Programação Orientada a Objetos em JavaAparicio Junior
 
Aula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em JavaAula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em JavaAparicio Junior
 
Tutorial instalacão java
Tutorial instalacão javaTutorial instalacão java
Tutorial instalacão javaAparicio Junior
 

Mais de Aparicio Junior (20)

Tips For the TOELF ITP
Tips For the TOELF ITPTips For the TOELF ITP
Tips For the TOELF ITP
 
Mock test structure TOEFL ITP
Mock test structure TOEFL ITPMock test structure TOEFL ITP
Mock test structure TOEFL ITP
 
Mock test reading TOEFL ITP
Mock test reading TOEFL ITPMock test reading TOEFL ITP
Mock test reading TOEFL ITP
 
Mock Test Listening TOEFL ITP
Mock Test Listening TOEFL ITPMock Test Listening TOEFL ITP
Mock Test Listening TOEFL ITP
 
General view of the TOEFL ITP
General view of the TOEFL ITPGeneral view of the TOEFL ITP
General view of the TOEFL ITP
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
Banco de Dados - Junções Externas e internas
Banco de Dados - Junções Externas e internasBanco de Dados - Junções Externas e internas
Banco de Dados - Junções Externas e internas
 
Lista 2 5
Lista 2 5Lista 2 5
Lista 2 5
 
Aula sobre Programação Orientada a Objetos em Java
Aula sobre Programação Orientada a Objetos em JavaAula sobre Programação Orientada a Objetos em Java
Aula sobre Programação Orientada a Objetos em Java
 
Lista 2 4
Lista 2 4Lista 2 4
Lista 2 4
 
Aula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em JavaAula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em Java
 
Tutorial instalacão java
Tutorial instalacão javaTutorial instalacão java
Tutorial instalacão java
 
Lista1 3 java
Lista1 3 javaLista1 3 java
Lista1 3 java
 
Lista 2 2 java
Lista 2 2 javaLista 2 2 java
Lista 2 2 java
 
Lista 2 1 java
Lista 2 1 javaLista 2 1 java
Lista 2 1 java
 
Lista 1 9 java
Lista 1 9 javaLista 1 9 java
Lista 1 9 java
 
Lista 1 8 java
Lista 1 8 javaLista 1 8 java
Lista 1 8 java
 
Lista 1 7 java
Lista 1 7 javaLista 1 7 java
Lista 1 7 java
 
Lista 1 6 java
Lista 1 6 javaLista 1 6 java
Lista 1 6 java
 
Lista 1 5 java
Lista 1 5 javaLista 1 5 java
Lista 1 5 java
 

Estruturas de Dados Pilha

  • 2. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro 1. Estrutura de Dados 8.1 Pilha 8.2 Fila 8.3 Lista 8.4 Árvores de pesquisa http://www.inf.ufsc.br/~ronaldo/ine5384/15- OrdenacaoDados.pdf Tema da aula
  • 3. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Introdução o Até o momento: o Vetores estáticos; o Com tamanho definido; o Acesso sequêncial; o De agora em diante: o Estruturas dinâmicas; o Com tamanho indefinido; 0 1 2 3 4 5 3 8 7 9 0 3 3 8 7 9 0 3
  • 4. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha (Stack)
  • 5. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Estrutura de dados de pilha o É a estrutura de dados mais simples; o É implementada diretamente pelo hardware das máquinas modernas; o Idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo; o O único elemento que pode ser removido é o topo; o Com esse fundamento faz com que os elementos da pilha sejam retirados de ordem inversa; o LIFO – Last In First Out
  • 6. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Funcionamento de uma pilha
  • 7. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Exemplo de uma aplicação com uso de pilha http://www.gameson.com.br/Jogos-Online/ClassicoPuzzle/Torre-de- Hanoi.html
  • 8. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Elementos de uma pilha o criar uma pilha vazia; o inserir um elemento no topo de uma pilha; o remover o elemento que está no topo de pilha; o verificar se a pilha esta vazia; o verificar o elemento que esta no topo da pilha; o zerar a pilha;
  • 9. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Elementos de uma pilha oPilha com vetores
  • 10. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro TDA de uma pilha oEmpilha(elemento) – insere um objeto no topo da pilha •Entrada = objeto saida = nenhum oDesempilhar() - retira um objeto do topo de pilha e o retorna, deverá ter uma proteção pois a pilha não pode estar vazia •Entrada = nenhum saída = objeto oTamanho() - retorna o número de objetos dentro de uma pilha •Entrada = nenhuma saída = inteiro oVazia() - retorna um booleano indicando se a pilha está vazia •Entrada = nenhuma saída = booleano
  • 11. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro TDA de uma pilha oTopo() - retorna o objeto que está no topo de uma pilha, deverá ter uma proteção para a pilha vazia; •Entrada = nenhuma saída = objeto
  • 12. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha pronta em JAVA
  • 13. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha pronta em JAVA o Em Java já temos uma classe para o TDA pilha, portanto basta importarmos o: •java.util.Stack o Os métodos push(obj) e pop() são equivalentes a empilha(o) e desempilha() respectivamente o O método peek() é equivalente ao método topo(), tamanho() e vazia(); o Os métodos pop() e peek() laçam a exceção StackEmptyException se a pilha estiver vazia
  • 14. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha pronta em JAVA package PilhaJava; import java.util.EmptyStackException; import java.util.Stack;
  • 15. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha pronta em JAVA Try{ // usou try pois a pilha pode estar vazia Stack pilha = new Stack(); //cria uma pilha como se fosse um objeto genérico . . . } catch(EmptyStackException e){ System.out.println("Pilha vazia"); }
  • 16. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha pronta em JAVA try{ // usou try pois a pilha pode estar vazia . . . pilha.push(1); pilha.push(2); System.out.println(pilha.peek()); pilha.pop(); System.out.println(pilha.peek()); pilha.pop(); System.out.println(pilha.peek()); } catch(EmptyStackException e){ System.out.println("Pilha vazia"); }
  • 17. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor
  • 18. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor package PilhaVetor; public class PilhaVetor { public static final int total = 1000; private int capacidade; private Object pilha[]; private int topo = -1; public PilhaVetor(){}
  • 19. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor public PilhaVetor(int tam){ capacidade = tam; pilha = new Object[capacidade]; } // retorna a quantidade de elementos da // pilha public int tamanho(){ return topo + 1; }
  • 20. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor // empilha um certo elemento no topo da // pilha public void empilhar(Object elemento){ if(tamanho() == capacidade) System.out.println("Pilha Cheia"); else pilha[++topo] = elemento; } // informa se a pilha estah vazia ou nao public boolean vazia(){ return(topo < 0); }
  • 21. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor // retira e retorna o elemento que estah // no topo da pilha public Object desempilhar(){ Object fora = null; if(vazia()) System.out.println("Pilha Vazia"); else{ fora = pilha[topo]; pilha[topo] = null; topo--; } return fora; }
  • 22. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor // retorna o elemento que estah no topo // de uma pilha public Object verTopo(){ if(!vazia()) return pilha[topo]; else return null; }
  • 23. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor public static void main(String[] args) { Dados a = new Dados("Ricardo", "Rua x", 34); Dados b = new Dados("Maria", "Rua y", 60); Dados c = new Dados("Joao", "Rua v", 19); PilhaVetor pilha = new PilhaVetor(3); pilha.empilhar(a); pilha.empilhar(b); pilha.empilhar(c); Dados res = (Dados) pilha.verTopo(); System.out.println(res.getNome() + " - " + res.getEndereco() + " - " + res.getIdade()); pilha.desempilhar();
  • 24. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Pilha com vetor res = (Dados) pilha.verTopo(); System.out.println(res.getNome() + " - " + res.getEndereco() + " - " + res.getIdade()); pilha.desempilhar(); res = (Dados) pilha.verTopo(); if (res != null) System.out.println(res.getNome() + " - " + res.getEndereco() + " - " + res.getIdade()); else System.out.println("Pilha vazia");
  • 25. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro TDA de uma pilha Representação do nó ou célula Representação da pilha topo
  • 26. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro TDA de uma pilha public class No<T> { private T valor; private No<T> proximo; public No(T valor, No<T> proximo) { this.valor = valor; this.proximo = proximo; } public No(){} .... // alem disso temos os // métodos de getters e // setters } Representação do nó ou célula
  • 27. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro TDA de uma pilha ublic class Pilha<T> { protected No<T> topo; protected int tamanho; public Pilha(){ tamanho = 0; topo = null; } .... } Representação da pilha topo
  • 28. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Criar uma pilha e verificar pilha vazia public Pilha(){ tamanho = 0; topo = null; }
  • 29. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Criar uma pilha e verificar pilha vazia public boolean vazia(){ return topo == null; } public int tamanho(){ return tamanho; }
  • 30. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Inserção na pilha (i) 1. Pré-requisito: pilha tem que estar criada e o próximo apontando para NULL; 2. Criar um nó ou célula; 3. Atribuir o elemento ao campo info; 4. O próximo do nó criado será ligado ao para quem o topo esta apontando
  • 31. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Inserção na pilha (ii) 5. Faz o topo apontar para o elemento que foi inserido Próximo passo: 6. O próximo do nó criado será ligado ao para quem o topo esta apontando
  • 32. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Inserção na pilha (iii) 5. Faz o topo apontar para o elemento que foi inserido
  • 33. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Inserção na pilha (iii) 5. Faz o topo apontar para o elemento que foi inserido void empilhar (T elemento){ No<T> aux = new No(null, null); aux.setValor(elemento); aux.setProximo(topo); topo = aux; tamanho++; }
  • 34. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Remoção da pilha (i) 1. Pré-condição é que tenha elementos na pilha. 2. Auxiliar recebe o topo da pilha 3. O topo aponta para o próximo do auxiliar
  • 35. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Remoção da pilha (i) T desempilhar (){ No<T> aux = null; T elemento = null; if (vazia()) { System.out.println("Pilha vazian"); } else { aux = topo; elemento = topo.getValor(); topo = aux.getProximo(); tamanho--; } return elemento; }
  • 36. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Ver topo da pilha (i) 1. Pré-requisito é ter elementos na pilha. 2. Um nó auxiliar recebe o topo e depois apresenta o que tem como info; void verTopo(){ No<T> aux = null; if (!vazia()) { aux = topo; System.out.println("Topo: " + aux.getValor()); } else{ System.out.println("Pilha vazian"); } }
  • 37. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Zerar pilha public static void main(String[] args){ Pilha<Integer> p = new Pilha(); p.empilhar(1); p.verTopo(); p.empilhar(2); p.verTopo(); Integer res = p.desempilhar(); System.out.println("Retirado: " + res.toString()); p.verTopo(); res = p.desempilhar(); System.out.println("Retirado: " + res.toString()); p.verTopo(); }
  • 38. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Exercícios • Dado o TDA abaixo criar uma pilha para armazenar dos dados; Contatos: nome; Endereco: rua; bairro; cep; numero; Telefone: fixo; celular; trabalho; email;
  • 39. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Exercícios • Método principal printf(“Menu”); printf(“n1.Empilhar”); printf(“n2.Desempilhar”); printf(“n3.Ver Topo”); printf(“n4.Zerar”); printf(“n5.Sair”); printf(“nDigite a opcao: ”); scanf(“%d”, &opcao);
  • 40. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Praticar • Considerando uma Pilha vazia, quais são os comandos necessários para a inserção do 1o nó ? • Considerando uma Pilha não vazia, quais são os comandos necessários para a exclusão de um nó ? • Considerando uma Pilha não vazia, quais são os comandos necessários para a inserção de um novo nó ?
  • 41. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Praticar implementação • Escreve um programa que utilizando uma pilha determina se uma string é um palíndromo ou não, isto é, se pode ser lida da mesma maneira para frente ou para trás. • Implemente uma APLICAÇÃO que utilize uma pilha para conversão de expressões da notação tradicional (infixa), completamente parentizadas, para a e notação polonesa reversa (pós-fixada).
  • 42. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Praticar implementação Implemente uma APLICAÇÃO que utilize uma pilha para conversão de expressões da notação tradicional (infixa), completamente parentizadas, para a e notação polonesa reversa (pré-fixada).
  • 43. INSTITUTO FEDERAL TRIÂNGULO MINEIRO Campus Uberlândia Centro Fim da aula..... ricardoboaventura@iftm.edu.br