SlideShare uma empresa Scribd logo
' $
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

PDF
Estrutura de Dados - PILHAS
PPTX
PDF
Pilha e filas
PDF
Pilha e Fila Estática
PPT
Pilhas e Filas
PPTX
PPTX
PDF
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Estrutura de Dados - PILHAS
Pilha e filas
Pilha e Fila Estática
Pilhas e Filas
Estrutura de Dados - Aula 06 - Pilhas Estáticas

Mais procurados (20)

PPT
Pilha ad
PPTX
PPTX
Estrutura de dados em Java - Pilhas
PDF
Estrutura de dados - Pilhas
PPTX
PDF
PPTX
Estrutura de dados em Java - Filas
KEY
Python 01
PDF
Python para quem sabe Python (aula 2)
KEY
Python 03
PDF
Pilha e Fila Dinamica
PDF
Iteraveis e geradores em Python
PDF
Python: Iteraveis, geradores etc
PDF
Iteraveis e geradores
PPTX
KEY
Python 02
PPTX
Javascript para CSharpers 4 - POO
PPTX
Monadic Design
PPTX
Pilha ad
Estrutura de dados em Java - Pilhas
Estrutura de dados - Pilhas
Estrutura de dados em Java - Filas
Python 01
Python para quem sabe Python (aula 2)
Python 03
Pilha e Fila Dinamica
Iteraveis e geradores em Python
Python: Iteraveis, geradores etc
Iteraveis e geradores
Python 02
Javascript para CSharpers 4 - POO
Monadic Design
Anúncio

Semelhante a Pilhas java (20)

PDF
Introdução a estruturas de dados com java
PDF
Java - Introdução a Coleções e Generics
PPT
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
ODP
Aula 01 -_pilhas_e_filas_com_vetores-oop
PDF
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
PDF
Estrutura de Dados - Aula 06 - Pilhas Estáticas
PPTX
PDF
Exercicios Pilhas (Stacks) - Estruturas de dados e algoritmos com Java
PPTX
PPTX
Slides collections
PPTX
listasfilaepilhasapresentacaosoftware123
PDF
Pged 05
PDF
Slides pilhas e_filas
PPT
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
PPTX
Classes e Estrutura de Dados
PPT
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
PPT
PDF
Java collections-basic
PPTX
Estrutura de Dados - Conceitos fundamentais
Introdução a estruturas de dados com java
Java - Introdução a Coleções e Generics
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula 01 -_pilhas_e_filas_com_vetores-oop
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados - Aula 06 - Pilhas Estáticas
Exercicios Pilhas (Stacks) - Estruturas de dados e algoritmos com Java
Slides collections
listasfilaepilhasapresentacaosoftware123
Pged 05
Slides pilhas e_filas
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Classes e Estrutura de Dados
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Java collections-basic
Estrutura de Dados - Conceitos fundamentais
Anúncio

Último (20)

PDF
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
PPTX
Filosofia Ocidental Antiga 2025 - versão atualizada
PDF
Cantores.pdf-Deslandes, Tinoco e Zambujo
PPTX
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PPT
Imperio Bbrasileiro-1822-1889 - aspectos gerais
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
PPTX
disciplulado curso preparatorio para novos
PDF
A Revolução Francesa de 1789 slides história
PDF
aulademeiodetransporteemlibras-120304202807-phpapp01_removed.pdf
PPTX
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
PPTX
brasilcolnia2-101027184359-phpapp02.pptx
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPTX
Reino Monera e Protista: representantes e caracteristicas.pptx
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PPT
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PPTX
MENDEL - Aula sobre Mendel - Genética EM
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
Filosofia Ocidental Antiga 2025 - versão atualizada
Cantores.pdf-Deslandes, Tinoco e Zambujo
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
Imperio Bbrasileiro-1822-1889 - aspectos gerais
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
disciplulado curso preparatorio para novos
A Revolução Francesa de 1789 slides história
aulademeiodetransporteemlibras-120304202807-phpapp01_removed.pdf
Slides Lição 7, CPAD, Uma Igreja Que Não Teme A Perseguição, 3Tr25.pptx
brasilcolnia2-101027184359-phpapp02.pptx
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
Reino Monera e Protista: representantes e caracteristicas.pptx
HISTÓRIA DO BRASIL - anos de Democracia.pptx
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
Trabalho Cidades sustentáveis ou Utopia.pptx
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
MENDEL - Aula sobre Mendel - Genética EM

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