aaed_pilha_fila

Upload: fabiolopes

Post on 10-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 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]);}

    }*/}