SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
' $
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
& %

Más contenido relacionado

La actualidad más candente

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)
Luciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
Wesley Lemos
 

La actualidad más candente (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
 

Similar a Pilhas java

11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
Ricardo Bolanho
 
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
Sérgio Souza Costa
 
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 blocos
Ricardo Bolanho
 

Similar 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

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
LeloIurk1
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
LusGlissonGud
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
azulassessoria9
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 

Último (20)

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
atividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdfatividades_reforço_4°ano_231206_132728.pdf
atividades_reforço_4°ano_231206_132728.pdf
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 

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 & %