SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
' $
ESTRUTURAS DE DADOS B´ASICAS EM
JAVA
Jos´e de Siqueira
UFMG - ICEx - DCC
1o
semestre de 2005
& %
' $
Estruturas de Dados B´asicas em Java
O Tipo Abstrato de Dados Pilha
• O TAD pilha tem quase as mesmas opera¸c˜oes
apresentadas anteriormente:
1. empilha(o): insere o objeto o no topo da
pilha.
Entrada: objeto. Sa´ıda: nenhuma.
2. desempilha(): retira o objeto no topo da
pilha e o roetorna; ocorre erro se a pilha
estiver vazia.
Entrada: nenhuma. Sa´ıda: objeto.
3. tamanho(): retorna o n´umero de objetos na
pilha.
Entrada: nenhuma. Sa´ıda: inteiro.
4. vazia(): Retorna um booleano indicando se a
pilha est´a vazia.
Entrada: nenhuma. Sa´ıda: booleano.
5. topo(): Retorna o objeto no topo da pilha,
sem retir´a-lo; ocorre um erro se a pilha estiver
vazia.
Entrada: nenhuma. Sa´ıda: objeto.
Jos´e de Siqueira 1
& %
' $
Estruturas de Dados B´asicas em Java
Uma interface para pilhas em Java
• Em Java, j´a existe a classe para o TAD pilha:
java.util.Stack.
• Os m´etodos dispon´ıveis nesta classe, entre outros,
s˜ao: push(obj), pop(), equivalentes a
empilha(o) e desempilha() e peek(), equivalente
a topo(), tamanho() e vazia().
• Os m´etodos pop() e peek() lan¸cam a exce¸c˜ao
StackEmptyException se a pilha estiver vazia
quando eles s˜ao chamados.
• Apesar de j´a existir esta classe em Java, aqui
estamos interessados em aprender como projetar e
implementar uma pilha e uma fila em Java.
• A implementa¸c˜ao de um TAD em Java envolve
dois passos:
1. a defini¸c˜ao de uma API (Application
Programming Interface) que descreve os
nomes dos m´etodos que o TAD oferece, como
eles s˜ao declarados e como s˜ao usados.
2. uma ou mais implementa¸c˜oes concretas dos
m´etodos descritos na interface (API)
associada com o TAD.
Jos´e de Siqueira 2
& %
' $
Estruturas de Dados B´asicas em Java
public interface Pilha {
/* retorna o n´umero de itens na pilha */
public int tamanho();
/* retorna true se a pilha est´a vazia, false sen˜ao */
public boolean vazia();
/*retorna, sem removˆe-lo, o item do topo da pilha;
lan¸ca StackEmptyException se a pilha estiver vazia*/
public Object topo()
throws StackEmptyException;
/* insere um item, passado em parˆametro, no topo
da pilha */
public void empilha(Object element);
/* remove e retorna o item no topo da pilha; lan¸ca
StackEmptyException se a pilha estiver vazia*/
public Object desempilha()
throws StackEmptyException;
}
/* Exce¸c˜oes lan¸cadas quando se tenta usar as opera¸c˜oes
em uma pilha vazia s˜ao tratadas aqui*/
public class StackEmptyException extends
RuntimeException {
public StackEmptyException (String erro) {
super(erro);
}
}
Jos´e de Siqueira 3
& %
' $
Estruturas de Dados B´asicas em Java
Uma implementa¸c˜ao baseada em vetores
• Nesta implementa¸c˜ao baseada em vetores, como o
vetor ´e alocado estaticamente, ao tentar empilhar
um objeto em uma pilha cheia, devemos lan¸car
uma exce¸c˜ao StackFullExcpetion.
• Esta exce¸c˜ao n˜ao foi definida no TAD Pilha por
ser espec´ıfica desta implementa¸c˜ao.
/* Implementa¸c˜ao da interface Pilha usando um
vetor de tamanho fixo. Uma exce¸c˜ao ´e lan¸cada ao
tentar empilhar um objeto em uma pilha cheia. */
public class PilhaComVetor implements Pilha
{
/* Tamanho m´aximo fixo do vetor usado como
pilha */
public static final int CapacidadeMax =
1000;
/* Capacidade da pilha */
private int Capacidade;
/* Vetor usado como pilha */
private Object P[ ];
/* ´ındice do elemento do topo da pilha */
private int topo = -1;
Jos´e de Siqueira 4
& %
' $
Estruturas de Dados B´asicas em Java
/* inicia a pilha para usar um vetor com tamanho
m´aximo CapacidadeMax */
public PilhaComVetor() {
this(CapacidadeMax);
}
/* inicia a pilha para um arranjo com o tamanho
fornecido; o parˆametro ´e o tamanho do vetor */
public PilhaComVetor(int tam) {
Capacidade = tam;
P = new Object[Capacidade];
}
public int tamanho() {
return(topo + 1);
}
public boolean vazia() {
return(topo < 0);
}
public void empilha(Object obj) throws
StackFullException {
if (tamanho() == Capacidade)
throw new StackFullException(‘‘Pilha
cheia!’’);
P[++topo] = obj;
}
Jos´e de Siqueira 5
& %
' $
Estruturas de Dados B´asicas em Java
public Object desempilha() throws
StackEmptyException {
Object elemento;
if (vazia())
throw new StackEmptyException(‘‘Pilha
vazia!’’);
elemento = P[topo];
P[topo] = null; // Libera P[topo] para a
// coleta de lixo
topo--;
return elemento;
}
}
• A pilha declarada acima ´e gen´erica, pois os
elementos s˜ao instˆancias da classe Object de Java.
• Pode-se armazenar qualquer objeto na pilha, pois
todas as classes Java herdam da classe Object.
• Assim, podemos empilhar objetos das classes
Integer, Estudante ou at´e mesmo Planetas.
• No entanto, ao desempilhar, ´e preciso fazer uma
convers˜ao para a classe espec´ıfica a que o objeto
realmente pertence, como mostra o trecho de
programa abaixo:
Jos´e de Siqueira 6
& %
' $
Estruturas de Dados B´asicas em Java
public static Integer[]
inverte(Integer[] a) {
PilhaComVetor P = new
PilhaComVetor(a.length);
Integer[] b = new Integer[a.length];
for (int i = 0; i < a.length; i++)
P.empilha(a[i]);
for (int i = 0; i < a.length; i++)
b[i] = (Integer) (P.desempilha());
return b;
}
O TAD fila em Java
• As opera¸c˜oes do TAD fila s˜ao:
1. insere(o): insere o obejto o no fim da fila.
Entrada: objeto. Sa´ıda: nenhuma.
2. retira(o): retira e retorna o objeto do in´ıcio da
fila. Lan¸ca uma exce¸c˜ao se a fila estiver vazia.
Entrada: nenhuma. Sa´ıda: objeto.
3. tamanho(): retorna o n´umero de objetos na
fila.
Entrada: nenhuma. Sa´ıda: inteiro.
Jos´e de Siqueira 7
& %
' $
Estruturas de Dados B´asicas em Java
4. vazia(): retorna um booleano indicando se a
fila est´a vaiza ou n˜ao.
Entrada: nenhuma. Sa´ıda: booleano.
5. frente(): retorna o objeto no in´ıcio da fila,
sem retir´a-lo.Lan¸ca uma exce¸c˜ao se a fila
estiver vazia.
Entrada: nenhuma. Sa´ıda: objeto.
public interface Fila {
/* retorna o n´umero de itens na fila */
prublic int tamanho();
/* retorna true se a fila estiver vazia, false sen˜ao */
public boolean vazia();
/* retorna o item `a frente na fila; lan¸ca
QueueEmptyException se a fila estiver vazia */
public Object frente() throws
QueueEmptyException;
/* insere elemento no final da fila */
public void insere(Object item);
/* remove e retorna o item `a frente da fila; lan¸ca
QueueEmptyException se a fila estiver vazia */
public Object retira() throws
QueueEmptyException;
Jos´e de Siqueira 8
& %
' $
Estruturas de Dados B´asicas em Java
Implementa¸c˜ao de filas com arranjos
• Para implementar uma fila em um arranjo de
tamanho N, ´e melhor utilizar uma fila circular.
• Para isso, temos dois apontadores i e f que
indicam o in´ıcio e o fim da fila.
• A fila est´a vazia quando i = f e f indica a
pr´oxima posi¸c˜ao livre.
• Problema: O que acontece quando f = N? O
que fazer neste caso?
• A implementa¸c˜ao da circularidade ´e simples se o
incremento for feito como (i + 1) mod N ou
(f + 1) mod N.
• Problema: como distinguir que a fila est´a cheia?
• Por exemplo, deixando sempre uma casa vazia
entre o fim e o in´ıcio.
• Ou inserindo, no m´aximo, N − 1 elementos.
Jos´e de Siqueira 9
& %
' $
Estruturas de Dados B´asicas em Java
Algoritmo tamanho();
retorna (N-i+f) mod N;
Algoritmo vazia();
retorna (i=f);
Algoritmo frente();
se vazia() ent~ao lan¸car uma
QueueEmptyException;
retorna F[i];
Algoritmo retira();
se vazia() ent~ao lan¸car uma
QueueEmptyException ;
aux ← F[i];
F[i] ← null;
i ← (i+1) mod N;
retorna aux;
Algoritmo insere(o);
se tamanho() = N - 1 ent~ao lan¸car uma
QueueFullException;
F[f] ← o;
f ← (f+1) mod N;
Jos´e de Siqueira 10
& %
' $
Estruturas de Dados B´asicas em Java
Listas encadeadas em Java
public class N´o {
// Vari´aveis de inst^ancia
private Object item;
private N´o prox;
// Construtores simples
public N´o() {
this(null,null);
}
public N´o(Object i, N´o n) {
item = i;
prox = n;
}
// M´etodos de acesso
Object retItem() {
return item;
}
N´o retProx() {
return prox;
}
// Modificadores
void posItem(Object novoItem) {
item = novoItem;
}
void posProx(N´o novoN´o) {
prox = novoN´o;
}
}
Jos´e de Siqueira 11
& %
' $
Estruturas de Dados B´asicas em Java
Implementa¸c˜ao de uma pilha com
listas encadeadas
public class PilhaEncadeada implements Pilha {
private N´o topo; // refer^encia para o n´o do
// topo
private int tam; // n´umero de itens na pilha
public PilhaEncadeada() {
topo = null;
tam = 0;
}
public int tamanho() {
return tam;
}
public boolean vazia() {
return (topo == null);
}
public void empilha(Object item) {
N´o v = new N´o(); // cria um novo n´o
v.posItem(item);
v.posProx(topo); // encadeia o novo n´o
topo = v;
tam++;
}
Jos´e de Siqueira 12
& %
' $
Estruturas de Dados B´asicas em Java
public Object topo() throws
StackEmptyException {
if (vazia())
throw new StackEmptyException(‘‘Pilha
est´a vazia.’’);
return topo.retItem();
}
public Object desempilha() throws
StackEmptyException {
if (vazia())
throw new StackEmptyException(‘‘Pilha
est´a vazia.’’);
Object aux = topo.retItem();
topo = topo.retProx; // aponta para o
// pr´oximo n´o
tam--;
return aux;
}
}
Jos´e de Siqueira 13
& %
' $
Estruturas de Dados B´asicas em Java
Implementa¸c˜ao de uma fila com
listas encadeadas
• Apresentamos apenas a implementa¸c˜ao de dois
m´etodos principais.
• As declara¸c˜oes de classe e os outros m´etodos para
a implementa¸c˜ao de filas com listas encadeadas
s˜ao deixadas como exerc´ıcio.
public void insere(Object obj) {
N´o n´o = new N´o();
n´o.posItem(obj);
n´o.posProx(null); // o n´o inserido ser´a o do
// final da lista
if (tam == 0) //inser¸c~ao em uma fila vazia
primeiro = n´o
else
´ultimo.posProx(n´o); // insere n´o no final
// da fila
´ultimo = n´o; // aponta para o n´o inserido
tam++;
}
Jos´e de Siqueira 14
& %
' $
Estruturas de Dados B´asicas em Java
public Object retira() throws
QueueEmptyException {
Object obj;
if (tam == 0)
throw new QueueEmptyException
(‘‘Fila est´a vazia.);
obj = primeiro.retItem();
primeiro = primeiro.retProx();
tam--;
if (tam == 0)
´ultimo = null // a fila ficou
// vazia
return obj;
}
Jos´e de Siqueira 15
& %

Mais conteúdo relacionado

Mais procurados (20)

Pilha ad
Pilha adPilha ad
Pilha ad
 
Aula 21
Aula 21Aula 21
Aula 21
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Pilha
PilhaPilha
Pilha
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Aula 13
Aula 13Aula 13
Aula 13
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Python 01
Python 01Python 01
Python 01
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Python 03
Python 03Python 03
Python 03
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Aula 17
Aula 17Aula 17
Aula 17
 
Python 02
Python 02Python 02
Python 02
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Monadic Design
Monadic DesignMonadic Design
Monadic Design
 
Aula 9
Aula 9Aula 9
Aula 9
 

Semelhante a Pilhas java

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
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dadosRicardo Bolanho
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
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
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.pptJoberthSilva
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)jose-junior89
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 

Semelhante a Pilhas java (20)

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)
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
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
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula14
Aula14Aula14
Aula14
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Java 07
Java 07Java 07
Java 07
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Pged 05
Pged 05Pged 05
Pged 05
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Melhorando seu App com Kotlin e Testes
Melhorando seu App com Kotlin e TestesMelhorando seu App com Kotlin e Testes
Melhorando seu App com Kotlin e Testes
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 

Último

Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...ArianeLima50
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaJúlio Sandes
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 

Último (20)

Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 

Pilhas java

  • 1. ' $ ESTRUTURAS DE DADOS B´ASICAS EM JAVA Jos´e de Siqueira UFMG - ICEx - DCC 1o semestre de 2005 & %
  • 2. ' $ Estruturas de Dados B´asicas em Java O Tipo Abstrato de Dados Pilha • O TAD pilha tem quase as mesmas opera¸c˜oes apresentadas anteriormente: 1. empilha(o): insere o objeto o no topo da pilha. Entrada: objeto. Sa´ıda: nenhuma. 2. desempilha(): retira o objeto no topo da pilha e o roetorna; ocorre erro se a pilha estiver vazia. Entrada: nenhuma. Sa´ıda: objeto. 3. tamanho(): retorna o n´umero de objetos na pilha. Entrada: nenhuma. Sa´ıda: inteiro. 4. vazia(): Retorna um booleano indicando se a pilha est´a vazia. Entrada: nenhuma. Sa´ıda: booleano. 5. topo(): Retorna o objeto no topo da pilha, sem retir´a-lo; ocorre um erro se a pilha estiver vazia. Entrada: nenhuma. Sa´ıda: objeto. Jos´e de Siqueira 1 & %
  • 3. ' $ Estruturas de Dados B´asicas em Java Uma interface para pilhas em Java • Em Java, j´a existe a classe para o TAD pilha: java.util.Stack. • Os m´etodos dispon´ıveis nesta classe, entre outros, s˜ao: push(obj), pop(), equivalentes a empilha(o) e desempilha() e peek(), equivalente a topo(), tamanho() e vazia(). • Os m´etodos pop() e peek() lan¸cam a exce¸c˜ao StackEmptyException se a pilha estiver vazia quando eles s˜ao chamados. • Apesar de j´a existir esta classe em Java, aqui estamos interessados em aprender como projetar e implementar uma pilha e uma fila em Java. • A implementa¸c˜ao de um TAD em Java envolve dois passos: 1. a defini¸c˜ao de uma API (Application Programming Interface) que descreve os nomes dos m´etodos que o TAD oferece, como eles s˜ao declarados e como s˜ao usados. 2. uma ou mais implementa¸c˜oes concretas dos m´etodos descritos na interface (API) associada com o TAD. Jos´e de Siqueira 2 & %
  • 4. ' $ Estruturas de Dados B´asicas em Java public interface Pilha { /* retorna o n´umero de itens na pilha */ public int tamanho(); /* retorna true se a pilha est´a vazia, false sen˜ao */ public boolean vazia(); /*retorna, sem removˆe-lo, o item do topo da pilha; lan¸ca StackEmptyException se a pilha estiver vazia*/ public Object topo() throws StackEmptyException; /* insere um item, passado em parˆametro, no topo da pilha */ public void empilha(Object element); /* remove e retorna o item no topo da pilha; lan¸ca StackEmptyException se a pilha estiver vazia*/ public Object desempilha() throws StackEmptyException; } /* Exce¸c˜oes lan¸cadas quando se tenta usar as opera¸c˜oes em uma pilha vazia s˜ao tratadas aqui*/ public class StackEmptyException extends RuntimeException { public StackEmptyException (String erro) { super(erro); } } Jos´e de Siqueira 3 & %
  • 5. ' $ Estruturas de Dados B´asicas em Java Uma implementa¸c˜ao baseada em vetores • Nesta implementa¸c˜ao baseada em vetores, como o vetor ´e alocado estaticamente, ao tentar empilhar um objeto em uma pilha cheia, devemos lan¸car uma exce¸c˜ao StackFullExcpetion. • Esta exce¸c˜ao n˜ao foi definida no TAD Pilha por ser espec´ıfica desta implementa¸c˜ao. /* Implementa¸c˜ao da interface Pilha usando um vetor de tamanho fixo. Uma exce¸c˜ao ´e lan¸cada ao tentar empilhar um objeto em uma pilha cheia. */ public class PilhaComVetor implements Pilha { /* Tamanho m´aximo fixo do vetor usado como pilha */ public static final int CapacidadeMax = 1000; /* Capacidade da pilha */ private int Capacidade; /* Vetor usado como pilha */ private Object P[ ]; /* ´ındice do elemento do topo da pilha */ private int topo = -1; Jos´e de Siqueira 4 & %
  • 6. ' $ Estruturas de Dados B´asicas em Java /* inicia a pilha para usar um vetor com tamanho m´aximo CapacidadeMax */ public PilhaComVetor() { this(CapacidadeMax); } /* inicia a pilha para um arranjo com o tamanho fornecido; o parˆametro ´e o tamanho do vetor */ public PilhaComVetor(int tam) { Capacidade = tam; P = new Object[Capacidade]; } public int tamanho() { return(topo + 1); } public boolean vazia() { return(topo < 0); } public void empilha(Object obj) throws StackFullException { if (tamanho() == Capacidade) throw new StackFullException(‘‘Pilha cheia!’’); P[++topo] = obj; } Jos´e de Siqueira 5 & %
  • 7. ' $ Estruturas de Dados B´asicas em Java public Object desempilha() throws StackEmptyException { Object elemento; if (vazia()) throw new StackEmptyException(‘‘Pilha vazia!’’); elemento = P[topo]; P[topo] = null; // Libera P[topo] para a // coleta de lixo topo--; return elemento; } } • A pilha declarada acima ´e gen´erica, pois os elementos s˜ao instˆancias da classe Object de Java. • Pode-se armazenar qualquer objeto na pilha, pois todas as classes Java herdam da classe Object. • Assim, podemos empilhar objetos das classes Integer, Estudante ou at´e mesmo Planetas. • No entanto, ao desempilhar, ´e preciso fazer uma convers˜ao para a classe espec´ıfica a que o objeto realmente pertence, como mostra o trecho de programa abaixo: Jos´e de Siqueira 6 & %
  • 8. ' $ Estruturas de Dados B´asicas em Java public static Integer[] inverte(Integer[] a) { PilhaComVetor P = new PilhaComVetor(a.length); Integer[] b = new Integer[a.length]; for (int i = 0; i < a.length; i++) P.empilha(a[i]); for (int i = 0; i < a.length; i++) b[i] = (Integer) (P.desempilha()); return b; } O TAD fila em Java • As opera¸c˜oes do TAD fila s˜ao: 1. insere(o): insere o obejto o no fim da fila. Entrada: objeto. Sa´ıda: nenhuma. 2. retira(o): retira e retorna o objeto do in´ıcio da fila. Lan¸ca uma exce¸c˜ao se a fila estiver vazia. Entrada: nenhuma. Sa´ıda: objeto. 3. tamanho(): retorna o n´umero de objetos na fila. Entrada: nenhuma. Sa´ıda: inteiro. Jos´e de Siqueira 7 & %
  • 9. ' $ Estruturas de Dados B´asicas em Java 4. vazia(): retorna um booleano indicando se a fila est´a vaiza ou n˜ao. Entrada: nenhuma. Sa´ıda: booleano. 5. frente(): retorna o objeto no in´ıcio da fila, sem retir´a-lo.Lan¸ca uma exce¸c˜ao se a fila estiver vazia. Entrada: nenhuma. Sa´ıda: objeto. public interface Fila { /* retorna o n´umero de itens na fila */ prublic int tamanho(); /* retorna true se a fila estiver vazia, false sen˜ao */ public boolean vazia(); /* retorna o item `a frente na fila; lan¸ca QueueEmptyException se a fila estiver vazia */ public Object frente() throws QueueEmptyException; /* insere elemento no final da fila */ public void insere(Object item); /* remove e retorna o item `a frente da fila; lan¸ca QueueEmptyException se a fila estiver vazia */ public Object retira() throws QueueEmptyException; Jos´e de Siqueira 8 & %
  • 10. ' $ Estruturas de Dados B´asicas em Java Implementa¸c˜ao de filas com arranjos • Para implementar uma fila em um arranjo de tamanho N, ´e melhor utilizar uma fila circular. • Para isso, temos dois apontadores i e f que indicam o in´ıcio e o fim da fila. • A fila est´a vazia quando i = f e f indica a pr´oxima posi¸c˜ao livre. • Problema: O que acontece quando f = N? O que fazer neste caso? • A implementa¸c˜ao da circularidade ´e simples se o incremento for feito como (i + 1) mod N ou (f + 1) mod N. • Problema: como distinguir que a fila est´a cheia? • Por exemplo, deixando sempre uma casa vazia entre o fim e o in´ıcio. • Ou inserindo, no m´aximo, N − 1 elementos. Jos´e de Siqueira 9 & %
  • 11. ' $ Estruturas de Dados B´asicas em Java Algoritmo tamanho(); retorna (N-i+f) mod N; Algoritmo vazia(); retorna (i=f); Algoritmo frente(); se vazia() ent~ao lan¸car uma QueueEmptyException; retorna F[i]; Algoritmo retira(); se vazia() ent~ao lan¸car uma QueueEmptyException ; aux ← F[i]; F[i] ← null; i ← (i+1) mod N; retorna aux; Algoritmo insere(o); se tamanho() = N - 1 ent~ao lan¸car uma QueueFullException; F[f] ← o; f ← (f+1) mod N; Jos´e de Siqueira 10 & %
  • 12. ' $ Estruturas de Dados B´asicas em Java Listas encadeadas em Java public class N´o { // Vari´aveis de inst^ancia private Object item; private N´o prox; // Construtores simples public N´o() { this(null,null); } public N´o(Object i, N´o n) { item = i; prox = n; } // M´etodos de acesso Object retItem() { return item; } N´o retProx() { return prox; } // Modificadores void posItem(Object novoItem) { item = novoItem; } void posProx(N´o novoN´o) { prox = novoN´o; } } Jos´e de Siqueira 11 & %
  • 13. ' $ Estruturas de Dados B´asicas em Java Implementa¸c˜ao de uma pilha com listas encadeadas public class PilhaEncadeada implements Pilha { private N´o topo; // refer^encia para o n´o do // topo private int tam; // n´umero de itens na pilha public PilhaEncadeada() { topo = null; tam = 0; } public int tamanho() { return tam; } public boolean vazia() { return (topo == null); } public void empilha(Object item) { N´o v = new N´o(); // cria um novo n´o v.posItem(item); v.posProx(topo); // encadeia o novo n´o topo = v; tam++; } Jos´e de Siqueira 12 & %
  • 14. ' $ Estruturas de Dados B´asicas em Java public Object topo() throws StackEmptyException { if (vazia()) throw new StackEmptyException(‘‘Pilha est´a vazia.’’); return topo.retItem(); } public Object desempilha() throws StackEmptyException { if (vazia()) throw new StackEmptyException(‘‘Pilha est´a vazia.’’); Object aux = topo.retItem(); topo = topo.retProx; // aponta para o // pr´oximo n´o tam--; return aux; } } Jos´e de Siqueira 13 & %
  • 15. ' $ Estruturas de Dados B´asicas em Java Implementa¸c˜ao de uma fila com listas encadeadas • Apresentamos apenas a implementa¸c˜ao de dois m´etodos principais. • As declara¸c˜oes de classe e os outros m´etodos para a implementa¸c˜ao de filas com listas encadeadas s˜ao deixadas como exerc´ıcio. public void insere(Object obj) { N´o n´o = new N´o(); n´o.posItem(obj); n´o.posProx(null); // o n´o inserido ser´a o do // final da lista if (tam == 0) //inser¸c~ao em uma fila vazia primeiro = n´o else ´ultimo.posProx(n´o); // insere n´o no final // da fila ´ultimo = n´o; // aponta para o n´o inserido tam++; } Jos´e de Siqueira 14 & %
  • 16. ' $ Estruturas de Dados B´asicas em Java public Object retira() throws QueueEmptyException { Object obj; if (tam == 0) throw new QueueEmptyException (‘‘Fila est´a vazia.); obj = primeiro.retItem(); primeiro = primeiro.retProx(); tam--; if (tam == 0) ´ultimo = null // a fila ficou // vazia return obj; } Jos´e de Siqueira 15 & %