Download - AAED_pilha_fila
-
8/8/2019 AAED_pilha_fila
1/18
Prof. Nelson Batista Leito Neto
Anlise de Algoritmo e Estrutura de Dados
Estrutura e dados do tipo Lista, Pilha e Fila
Lista
LISTAS SIMPLESMENTE ENCADEADAS
So listas que contm o endereo de apenas um registro. Os ponteiros apontam para o prximo registro.
Implementao:
package lsimplesmente;
import java.io.*;
class LSimples {
/* Constri um menu de opes para manipulao da lista*/
public static void escolhas () {
System.out.print ("Escolha a Opcao:");
System.out.print (" \n1. Inserir N no incio");
System.out.print (" \n2. Inserir N no fim");
System.out.print (" \n3. Inserir N em uma posicao");
System.out.print (" \n4. Localizar N");
System.out.print (" \n5. Excluir N");
System.out.print (" \n6. Exibir lista");
System.out.print (" \n7. Sair");
System.out.print ("Opcao :\t ");
}
public static void main(String args[]){
ListaSimples Slist = new ListaSimples(); /*Slist = Simples Lista*/
BufferedReader entrada;
entrada = new BufferedReader(new InputStreamReader(System.in));
1
-
8/8/2019 AAED_pilha_fila
2/18
Prof. Nelson Batista Leito Neto
int i = 0;
IntNoSimples temp_no; /*cria estrutura IntNoSimples*/
int valor;
try {
escolhas();
char opcao = entrada.readLine().charAt(0);
while (opcao != '7') {
switch (opcao) {
case '1' :
System.out.println("Insere um N no inicio da lista");
System.out.println("Digite um valor");
valor = Integer.parseInt(entrada.readLine());
Slist.insereNo_inicio(new IntNoSimples(valor));
break;
case '2' :
System.out.println("Insire um Valor no final da lista");
System.out.println("Digite um valor");
valor = Integer.parseInt(entrada.readLine());
Slist.insereNo_fim(new IntNoSimples(valor));
break;
case '3' :
System.out.println("Insire um Valor numa dada posicao");
System.out.println("Digite um valor");
valor = Integer.parseInt(entrada.readLine());
System.out.println("Digite a posicao");
int posicao = Integer.parseInt(entrada.readLine());
Slist.insereNo_posicao(new IntNoSimples(valor),posicao);
break;
case '4':
System.out.println("Localiza um valor");
2
-
8/8/2019 AAED_pilha_fila
3/18
Prof. Nelson Batista Leito Neto
System.out.println("Digite um valor");
valor = Integer.parseInt(entrada.readLine());
Slist.buscaNo(valor);
break;
case '5':
System.out.println("Exclui um elemento da lista");
System.out.println("Digite o valor");
valor = Integer.parseInt(entrada.readLine());
Slist.excluiNo(valor);
break;
case '6':
System.out.println("Exibe a lista");
Slist.exibeLista();
break;
default : System.out.println ("Opcao Invalida !");
}
System.out.println();
escolhas();
opcao = entrada.readLine().charAt(0);
}
} catch (Exception erro){
System.out.println ("Erro de Entrada de Dados");
}}}
Classe ListaSimples
package lsimplesmente;
class ListaSimples{
IntNoSimples primeiro, ultimo;
3
-
8/8/2019 AAED_pilha_fila
4/18
Prof. Nelson Batista Leito Neto
int numero_nos;
ListaSimples(){
primeiro = ultimo = null;
}
void insereNo_fim (IntNoSimples novoNo){
novoNo.prox = null;
if (primeiro == null)/*nesta condio, o primeiro elemento a ser inserido*/
primeiro = novoNo;
if (ultimo != null)
ultimo.prox = novoNo;
ultimo = novoNo;
}
void insereNo_inicio (IntNoSimples novoNo){
if (primeiro != null)
novoNo.prox = primeiro;
else
{ if (primeiro == null)
primeiro = novoNo;
ultimo = novoNo;
}
}
int ContarNos()
{ int tamanho = 0;
IntNoSimples temp_no = primeiro;
while (temp_no != null)
{ tamanho++;
temp_no = temp_no.prox;
}
return tamanho;
}
4
-
8/8/2019 AAED_pilha_fila
5/18
Prof. Nelson Batista Leito Neto
void insereNo_posicao(IntNoSimples novoNo, int posicao)
{IntNoSimples temp_no = primeiro;
int numero_nos = ContarNos();
int pos_aux;
if(posicao == 0)
{novoNo.prox = primeiro;
if(primeiro == ultimo)
{ultimo = novoNo;}
primeiro = novoNo;}
else
{if (posicao pos_aux)
{temp_no = temp_no.prox;
pos_aux ++;
}
novoNo.prox = temp_no.prox;
temp_no.prox = novoNo;
}
else
{if(posicao > numero_nos)
{ultimo.prox = novoNo;
ultimo = novoNo;
} } } }
IntNoSimples buscaNo (int buscaValor){
int i = 0;
IntNoSimples temp_no = primeiro;
while (temp_no != null)
{ if (temp_no.valor == buscaValor)
{System.out.println("No " + temp_no.valor + " posicao " + i);
5
-
8/8/2019 AAED_pilha_fila
6/18
Prof. Nelson Batista Leito Neto
return temp_no;
}
i++;
temp_no = temp_no.prox;
}
return null;
}
void excluiNo (int valor)
{ IntNoSimples temp_no = primeiro;
while (temp_no != null && temp_no.valor != valor)
{temp_no = temp_no.prox;
}
temp_no.prox = temp_no.prox.prox;
if (ultimo == temp_no.prox)
ultimo = temp_no;
}
void exibeLista()
{IntNoSimples temp_no = primeiro;
int i = 0;
while (temp_no != null)
{System.out.println("Valor " + temp_no.valor + " posicao "+ i);
temp_no = temp_no.prox;
i++;
}}}
Classe IntNoSimples
package lsimplesmente;
class IntNoSimples{
int valor;
IntNoSimples prox;/*varivel com mesmo nome da classe, onde prox faz referncia ao prxelemento da lista. Java no aceita ponteiros */
6
-
8/8/2019 AAED_pilha_fila
7/18
Prof. Nelson Batista Leito Neto
IntNoSimples(int valorNo){
valor = valorNo;
prox = null;
}
}
LISTAS DUPLAMENTE ENCADEADAS
So listas que contm endereo do registro anterior e posterior.
Implementao:
package ldupla;
class LDuplamente{
public static void main(String[] args){
ListaDupla Slist = new ListaDupla ();
Slist.insereNo (new IntNoDuplo (1));
Slist.insereNo (new IntNoDuplo (3));
Slist.insereNo (new IntNoDuplo (5));
Slist.insereNo (new IntNoDuplo (7));
IntNoDuplo temp_no = Slist.primeiro;
while (temp_no != null){
System.out.println (temp_no.valor);
temp_no = temp_no.prox;
}
Slist.incluiNo (new IntNoDuplo (2), 1);
System.out.println ("Apos incluir o no 2...");
7
-
8/8/2019 AAED_pilha_fila
8/18
Prof. Nelson Batista Leito Neto
temp_no = Slist.primeiro;
while (temp_no != null){
System.out.println (temp_no.valor);
temp_no = temp_no.prox;
}
Slist.excluiNo (2);
System.out.println ("Apos excluir o no 3...");
temp_no = Slist.primeiro;
while (temp_no != null){
System.out.println (temp_no.valor);
temp_no = temp_no.prox;
}
}
}
Classe ListaDupla
package ldupla;
class ListaDupla{
IntNoDuplo primeiro, ultimo;
int numero_nos;
ListaDupla (){
primeiro = ultimo = null;
numero_nos = 0;
}
void insereNo (IntNoDuplo novoNo){
novoNo.prox = null;
8
-
8/8/2019 AAED_pilha_fila
9/18
Prof. Nelson Batista Leito Neto
novoNo.ant = ultimo;
if (primeiro == null)
primeiro = novoNo;
if (ultimo != null)
ultimo.prox = novoNo;
ultimo = novoNo;
numero_nos++;
}
IntNoDuplo pegarNo (int indice){
IntNoDuplo temp_no = primeiro;
for (int i = 0; (i < indice) && (temp_no != null); i++)
temp_no = temp_no.prox;
return temp_no;
}
void incluiNo (IntNoDuplo novoNo, int indice){
IntNoDuplo temp_no = pegarNo (indice);
novoNo.prox = temp_no;
if (novoNo.prox != null){
novoNo.ant = temp_no.ant;
novoNo.prox.ant = novoNo;
}else{
novoNo.ant = ultimo;
ultimo = novoNo;
}
if (indice == 0)
primeiro = novoNo;
else
novoNo.ant.prox = novoNo;
numero_nos++;
}
9
-
8/8/2019 AAED_pilha_fila
10/18
Prof. Nelson Batista Leito Neto
void excluiNo (int indice){
if (indice == 0){
primeiro = primeiro.prox;
if (primeiro != null)
primeiro.ant = null;
}else{
IntNoDuplo temp_no = pegarNo (indice);
temp_no.ant.prox = temp_no.prox;
if (temp_no != ultimo)
temp_no.prox.ant = temp_no.ant;
else
ultimo = temp_no;
}
numero_nos--;
}
}
Classe IntNoDuplo
package ldupla;
class IntNoDuplo{
int valor;
IntNoDuplo prox;
IntNoDuplo ant;
IntNoDuplo (int valorNo){
valor = valorNo;
prox = ant = null;
}
}
10
-
8/8/2019 AAED_pilha_fila
11/18
Prof. Nelson Batista Leito Neto
Pilha
Estrutura de dados simples e bastante utilizada. O acesso feito pelo topo. Se introduzidonovo elemento, este fica no topo. O nico elemento a ser removido o do topo. O primeiroelemento que entrou o ltimo a sair.FILO = FIRST IN LAST OUT.
11
-
8/8/2019 AAED_pilha_fila
12/18
Prof. Nelson Batista Leito Neto
Implementao
package pilhas;
import java.io.*;class usaPilha {
public static void escolhas () {System.out.println ("Escolha a Opcao:");System.out.print ("\n1. Inserir");System.out.print (" \n2. Sada");//System.out.print (" \n3. Exibir a Pilha");System.out.print (" \n4. Sair");System.out.print ("\n. Opcao :\t ");
}public static void main(String args[]){
Pilha objPilha = new Pilha(4);BufferedReader entrada;entrada = new BufferedReader(
new InputStreamReader (System.in) );Object valor;try {
escolhas();char opcao = entrada.readLine().charAt(0);
while (opcao != '4') {switch (opcao) {
case '1' :if (objPilha.cheia() == false)
{System.out.println ("Digite valor: ");valor = entrada.readLine();
12
-
8/8/2019 AAED_pilha_fila
13/18
Prof. Nelson Batista Leito Neto
objPilha.empilhar(valor);}
else{System.out.println("Pilha Cheia ! ");
}break;case '2' :if (objPilha.vazia() == false)
{System.out.println (objPilha.desempilhar());
}else{System.out.println("Pilha Vazia ! ");}
break;/*case '3' :
objPilha.exibePilha();break;*/
default : System.out.println ("Opcao Invalida !");}System.out.println();
escolhas();opcao = entrada.readLine().charAt(0);}
} catch (Exception erro){System.out.println ("Erro de Entrada de Dados. Provvel Pilha Cheia");
}}
}
Classe Pilha
package pilhas;
class Pilha {int tamanho;int topo;Object vetor[];
Pilha(int tam) {topo = -1;tamanho = tam;vetor = new Object[tam];
}
public boolean vazia (){if (topo == -1)return true;else
return false;}
public boolean cheia (){if (topo >= tamanho)return true;elsereturn false;}
13
-
8/8/2019 AAED_pilha_fila
14/18
Prof. Nelson Batista Leito Neto
public void empilhar(Object elem){if ( !cheia( ) ){topo++;vetor[topo] = elem;
}else{System.out.println("Pilha Cheia");}
}
public Object desempilhar(){Object valorDesempilhado;if ( vazia( ) == true ){ System.out.print("Pilha Vazia");valorDesempilhado = null;return valorDesempilhado;
}else{ valorDesempilhado = vetor[topo];topo--;return valorDesempilhado;
}}/*public void exibePilha()
{for(int i = topo; i >= 0; i--)System.out.println("Elemento " + vetor[i] + " posicao " + i);}*/
}
Fila
Estrutura de dados tambm simples e bastante utilizada. O acesso feito pelo incio. Soacessados na ordem que foram inseridos. O elemento novo vai pro final da fila e quando removido, ser o primeiro elemento inserido. Primeiro que entrou e o primeiro que sai. (FIFO FIRST IN FIRST OUT).
14
-
8/8/2019 AAED_pilha_fila
15/18
Prof. Nelson Batista Leito Neto
15
-
8/8/2019 AAED_pilha_fila
16/18
Prof. Nelson Batista Leito Neto
Implementao
package filas;
import java.io.*;class usaFila {
public static void escolhas () {
System.out.println ("Escolha a Opcao:");System.out.print ("\n1. Inserir");System.out.print (" \n2. Sada");
// System.out.print (" \n3. Exibir a Fila");System.out.print (" \n4. Sair");System.out.print ("\n. Opcao :\t ");
}public static void main(String args[]){
Fila objFila = new Fila(4);BufferedReader entrada;
entrada = new BufferedReader(
new InputStreamReader (System.in) );Object valor;try {
escolhas();char opcao = entrada.readLine().charAt(0);
while (opcao != '4') {switch (opcao) {
case '1' :if (!objFila.cheia())
{System.out.println ("Digite Valor: ");valor = entrada.readLine();objFila.enfileirar(valor);
}else
{System.out.println("Fila Cheia ! ");}break;
case '2' :if (objFila.vazia() == false)
{System.out.println(objFila.desenfileirar());}
else{System.out.println("Fila Vazia ! ");
16
-
8/8/2019 AAED_pilha_fila
17/18
Prof. Nelson Batista Leito Neto
}break;
/* case '3' :objFila.exibeFila();
break;*/default : System.out.println ("Opcao Invalida !");}System.out.println();escolhas();
opcao = entrada.readLine().charAt(0);}} catch (Exception erro){
System.out.println ("Erro de Entrada de Dados");}
}}
Classe Fila
package filas;
class Fila {int tamanho;int inicio;int fim;int total;Object vetor[];
Fila(int tam) {inicio = 0;fim = 0;total = 0;tamanho = tam;vetor = new Object[tam];
}public boolean vazia () {
if (total == 0)return true;
elsereturn false;
}public boolean cheia () {
if (total >= tamanho)
return true;else
return false;}public void enfileirar(Object elem) {
if ( !cheia()){ vetor[fim] = elem;fim++;total++;if (fim >= tamanho)
fim = 0;}
17
-
8/8/2019 AAED_pilha_fila
18/18
Prof. Nelson Batista Leito Neto
else{ System.out.println("Fila Cheia");}
}public Object desenfileirar()
{ Object excluido;{ if (vazia() == false)
{excluido = vetor[inicio];inicio++;
if (inicio >= tamanho)inicio = 0;
total --;return excluido;} else{ excluido = null;return excluido;
}}}
/*public void exibeFila()
{for (int i = 0; i < total; i++){System.out.println("posicao " + i +" valor "+vetor[i]);}
}*/}