SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Estrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasEstrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasLeinylson Fontinele
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlgWillians Miyabara
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesaPacc UAB
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Alex Camargo
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
 
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
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaLeinylson Fontinele
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
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
 

Tendances (20)

Linguagem C 07 Registros
Linguagem C 07 RegistrosLinguagem C 07 Registros
Linguagem C 07 Registros
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasEstrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas Estáticas
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesa
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
 
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
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
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
 

Similaire à 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
 
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
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basicoWemerson Silva
 

Similaire à 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
 
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
 
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
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 

Plus 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
 

Plus 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