Listas (parte 1)

1,242 views
1,173 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,242
On SlideShare
0
From Embeds
0
Number of Embeds
632
Actions
Shares
0
Downloads
21
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Listas (parte 1)

  1. 1. Tecnologia em Sistemas para Internet - IFMSAula 04 – Listas (parte 1)Estruturas de DadosProf.º Msc. Sidney Roberto de Sousasidney.sousa@ifms.edu.br
  2. 2. Tec. em Sistemas para Internet - IFMS 2O que veremos nesta aula?●O que é uma lista?●Listas simples●Listas encadeadas●Listas duplamente encadeadas
  3. 3. Tec. em Sistemas para Internet - IFMS 3Lista●Estrutura de dados abstrata e linear queimplementa uma coleção finita e ordenada devalores●Cada instância de um valor na lista é chamadode ítem (ou elemento) da lista
  4. 4. Tec. em Sistemas para Internet - IFMS 4Propriedades de uma lista●Tamanho: Número de itens armazenados na lista.●Índice: Cada elemento na lista possui um índice, ou seja, umnúmero que o identifica.●Tipo(*): Toda lista possui um tipo. Assim, todo item da lista possuio mesmo tipo.●Igualdade: Uma lista a é igual a uma outra lista b se e somente se,para cada índice i de a e b, ai é igual a bi quanto aos seus valores eestruturas.(* Na verdade, tanto na linguagem Java quanto na maioria das linguagens modernas, uma lista pode conter itens de tipos variados. Manteremos esta definiçãopor enquanto apenas por conveniência aos nossos estudos.)
  5. 5. Tec. em Sistemas para Internet - IFMS 5Listas simples●Listas simples ou listas estáticas são listasque permitem a adição de um númerolimitado de itens → tamanho invariável●Neste tipo de lista, o acesso a um item situadoem um determinado índice é feito de formarápida e prática●Listas simples podem ser implementadascomo matrizes unidimensionais (vetores)
  6. 6. Tec. em Sistemas para Internet - IFMS 6Exemplo: Lista simplesClasse ListaSimples(abaixo no blog)
  7. 7. Tec. em Sistemas para Internet - IFMS 7Inserção em uma lista simplespublic boolean adicionarItem(Integer novoItem, int indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        lista[indiceDoItem] = novoItem;        return true;    }    return false;}
  8. 8. Tec. em Sistemas para Internet - IFMS 8Inserção em uma lista simplespublic boolean adicionarItem(Integer novoItem, int indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        lista[indiceDoItem] = novoItem;        return true;    }    return false;}Verifica se a posição desejada para o armazenamento donovo elemento é válida.
  9. 9. Tec. em Sistemas para Internet - IFMS 9Inserção em uma lista simplespublic boolean adicionarItem(Integer novoItem, int indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        lista[indiceDoItem] = novoItem;        return true;    }    return false;}Se a posição for válida, o novo elemento é inserido naposição desejada. Caso já haja um outro elemento nestaposição, tal elemento é sobreposto pelo novo elemento.O método retorna o valor true, indicando que o elementofoi inserido com sucesso.
  10. 10. Tec. em Sistemas para Internet - IFMS 10Inserção em uma lista simplespublic boolean adicionarItem(Integer novoItem, int indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        lista[indiceDoItem] = novoItem;        return true;    }    return false;}Se a posição for inválida, o método retorna o valor false,indicando que o elemento não foi inserido.
  11. 11. Tec. em Sistemas para Internet - IFMS 11Remoção em uma lista simplespublic Integer removerItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho        && lista[indiceDoItem] != null) {        Integer itemRemovido = lista[indiceDoItem];        lista[indiceDoItem] = null;        return itemRemovido;    }    return null;}
  12. 12. Tec. em Sistemas para Internet - IFMS 12Remoção em uma lista simplespublic Integer removerItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho        && lista[indiceDoItem] != null) {        Integer itemRemovido = lista[indiceDoItem];        lista[indiceDoItem] = null;        return itemRemovido;    }    return null;}Verifica se existe algum elemento a ser removido naposição desejada. Também verifica se tal posição éválida.
  13. 13. Tec. em Sistemas para Internet - IFMS 13Remoção em uma lista simplespublic Integer removerItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho        && lista[indiceDoItem] != null) {        Integer itemRemovido = lista[indiceDoItem];        lista[indiceDoItem] = null;        return itemRemovido;    }    return null;}Caso a posição informada seja válida e existaalgum elemento a ser removido, o elemento é“removido” ao se substituir o seu valor pelo valornull. Por fim, o método retorna o valor do itemrecém removido.
  14. 14. Tec. em Sistemas para Internet - IFMS 14Remoção em uma lista simplespublic Integer removerItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho        && lista[indiceDoItem] != null) {        Integer itemRemovido = lista[indiceDoItem];        lista[indiceDoItem] = null;        return itemRemovido;    }    return null;}Caso a posição informada seja inválida ou nãoexista um elemento a ser removido, o métodoretorna o valor null.
  15. 15. Tec. em Sistemas para Internet - IFMS 15Pegando um elemento de uma lista simplespublic Integer pegarItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        return lista[indiceDoItem];    }    return null;}
  16. 16. Tec. em Sistemas para Internet - IFMS 16Pegando um elemento de uma lista simplespublic Integer pegarItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        return lista[indiceDoItem];    }    return null;}Primeiramente, o método verifica se a posição do itemdesejado é válida.
  17. 17. Tec. em Sistemas para Internet - IFMS 17Pegando um elemento de uma lista simplespublic Integer pegarItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        return lista[indiceDoItem];    }    return null;}Se a posição é válida, o elemento desejado éretornado. Note que o acesso ao elemento da lista érealizado diretamente por meio do uso do índicecorreto. Caso nenhum elemento tenha sidoadicionado nesta posição, o valor null é retornado.
  18. 18. Tec. em Sistemas para Internet - IFMS 18Pegando um elemento de uma lista simplespublic Integer pegarItem(Integer indiceDoItem) {    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {        return lista[indiceDoItem];    }    return null;}Se a posição é inválida, o método retorna o valor null.
  19. 19. Tec. em Sistemas para Internet - IFMS 19Utilizando a classe ListaSimplesListaSimples listaSimples = new ListaSimples(10);listaSimples.adicionarItem(8, 0);listaSimples.adicionarItem(­7, 5);listaSimples.adicionarItem(98, 9);listaSimples.adicionarItem(7, 5);listaSimples.adicionarItem(123, 6);listaSimples.removerItem(5);listaSimples.removerItem(2);for (int i = 0; i < listaSimples.tamanhoDaLista(); i++) {    System.out.print(listaSimples.pegarItem(i) + " ");}/* * Imprime na tela: * 8 null null null null null 123 null null 98  */
  20. 20. Tec. em Sistemas para Internet - IFMS 20Listas encadeadas●Listas encadeadas ou listas ligadas sãolistas dinâmicas que permitem a adição deum número teoricamente ilimitado de itens●Neste tipo de lista, o acesso aos itens não érealizado diretamente por meio de um índice●Cada elemento da lista possui um link para opróximo elemento da lista
  21. 21. Tec. em Sistemas para Internet - IFMS 21Exemplo: Lista encadeadaClasses No e ListaEncadeada(abaixo no post)
  22. 22. Tec. em Sistemas para Internet - IFMS 22Classe Nopublic class No {    private Integer item;    private No proximoItem;    public No() {        proximoItem = null;    }    // Getters e setters para os atributos da classe...}
  23. 23. Tec. em Sistemas para Internet - IFMS 23Classe Nopublic class No {    private Integer item;    private No proximoItem;    public No() {        proximoItem = null;    }    // Getters e setters para os atributos da classe...}Encapsula um itemna lista encadeada
  24. 24. Tec. em Sistemas para Internet - IFMS 24Classe Nopublic class No {    private Integer item;    private No proximoItem;    public No() {        proximoItem = null;    }    // Getters e setters para os atributos da classe...}Armazena o valordo item
  25. 25. Tec. em Sistemas para Internet - IFMS 25Classe Nopublic class No {    private Integer item;    private No proximoItem;    public No() {        proximoItem = null;    }    // Getters e setters para os atributos da classe...}Ponteiro (link) para opróximo item da listaencadeada
  26. 26. Tec. em Sistemas para Internet - IFMS 26Classe Nopublic class No {    private Integer item;    private No proximoItem;    public No() {        proximoItem = null;    }    // Getters e setters para os atributos da classe...}Construtor da classeNo. Inicializa o atributoproximoItem com ovalor null. Isto indicaque inicialmente o itemnão estão ligado a umpróximo item.
  27. 27. Tec. em Sistemas para Internet - IFMS 27Representação da lista encadeadaitemproximoItemitemproximoItemitemproximoItemitemproximoItemNo No No No
  28. 28. Tec. em Sistemas para Internet - IFMS 28Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}
  29. 29. Tec. em Sistemas para Internet - IFMS 29Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}Encapsula uma listaencadeada, onde cadaitem da lista éencapsulado pela classeNo. Contém asoperações sobre a lista.
  30. 30. Tec. em Sistemas para Internet - IFMS 30Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}Guarda o tamanho dalista, ou seja, o númerode ítens contidos nela.
  31. 31. Tec. em Sistemas para Internet - IFMS 31Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}Guarda o primeiroitem da lista.
  32. 32. Tec. em Sistemas para Internet - IFMS 32Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}Guarda o últimoitem da lista.
  33. 33. Tec. em Sistemas para Internet - IFMS 33Classe ListaEncadeadapublic class ListaEncadeada {    private int tamanho;    private No primeiroItem;    private No ultimoItem;       public ListaEncadeada() {        primeiroItem = null;        ultimoItem = null;        tamanho = 0;    }    // Restante da classe...}Construtor da classeListaEncadeada.Inicializa os atributosda classe, sinalizandoque a lista ainda nãopossui elementos.
  34. 34. Tec. em Sistemas para Internet - IFMS 34Inserindo um novo item no iníciopublic void adicionarNoInicio(Integer novoItem) {    if (tamanho == 0) {        primeiroItem = new No();        primeiroItem.setItem(novoItem);        ultimoItem = primeiroItem;    } else {        No antigoPrimeiroItem = primeiroItem;        primeiroItem = new No();        primeiroItem.setItem(novoItem);        primeiroItem.setProximoItem(antigoPrimeiroItem);    }    tamanho++;}
  35. 35. Tec. em Sistemas para Internet - IFMS 35Inserindo um novo item no iníciopublic void adicionarNoInicio(Integer novoItem) {    if (tamanho == 0) {        primeiroItem = new No();        primeiroItem.setItem(novoItem);        ultimoItem = primeiroItem;    } else {        No antigoPrimeiroItem = primeiroItem;        primeiroItem = new No();        primeiroItem.setItem(novoItem);        primeiroItem.setProximoItem(antigoPrimeiroItem);    }    tamanho++;}Caso a lista estejavazia, um novo item écriado com o valordesejado. O novo itemse torna o primeiro e oúltimo item da listasimultaneamente.
  36. 36. Tec. em Sistemas para Internet - IFMS 36Inserindo um novo item no iníciopublic void adicionarNoInicio(Integer novoItem) {    if (tamanho == 0) {        primeiroItem = new No();        primeiroItem.setItem(novoItem);        ultimoItem = primeiroItem;    } else {        No antigoPrimeiroItem = primeiroItem;        primeiroItem = new No();        primeiroItem.setItem(novoItem);        primeiroItem.setProximoItem(antigoPrimeiroItem);    }    tamanho++;}Caso a lista não esteja vazia,um novo item é criado com ovalor desejado. O novo itemse torna o primeiro item dalista.
  37. 37. Tec. em Sistemas para Internet - IFMS 37Inserindo um novo item no iníciopublic void adicionarNoInicio(Integer novoItem) {    if (tamanho == 0) {        primeiroItem = new No();        primeiroItem.setItem(novoItem);        ultimoItem = primeiroItem;    } else {        No antigoPrimeiroItem = primeiroItem;        primeiroItem = new No();        primeiroItem.setItem(novoItem);        primeiroItem.setProximoItem(antigoPrimeiroItem);    }    tamanho++;}Após o item ser inserido, otamanho da lista éincrementado em uma unidade.
  38. 38. Tec. em Sistemas para Internet - IFMS 38Inserindo um novo item no finalpublic void adicionarNoFinal(Integer novoItem) {    if (tamanho == 0) {        ultimoItem = new No();        ultimoItem.setItem(novoItem);        primeiroItem = ultimoItem;    } else {        No antigoUltimoItem = ultimoItem;        ultimoItem = new No();        ultimoItem.setItem(novoItem);        antigoUltimoItem.setProximoItem(ultimoItem);    }    tamanho++;}
  39. 39. Tec. em Sistemas para Internet - IFMS 39Inserindo um novo item no finalpublic void adicionarNoFinal(Integer novoItem) {    if (tamanho == 0) {        ultimoItem = new No();        ultimoItem.setItem(novoItem);        primeiroItem = ultimoItem;    } else {        No antigoUltimoItem = ultimoItem;        ultimoItem = new No();        ultimoItem.setItem(novoItem);        antigoUltimoItem.setProximoItem(ultimoItem);    }    tamanho++;}Caso a lista estejavazia, um novo item écriado com o valordesejado. O novo itemse torna o primeiro e oúltimo item da listasimultaneamente.
  40. 40. Tec. em Sistemas para Internet - IFMS 40Inserindo um novo item no finalpublic void adicionarNoFinal(Integer novoItem) {    if (tamanho == 0) {        ultimoItem = new No();        ultimoItem.setItem(novoItem);        primeiroItem = ultimoItem;    } else {        No antigoUltimoItem = ultimoItem;        ultimoItem = new No();        ultimoItem.setItem(novoItem);        antigoUltimoItem.setProximoItem(ultimoItem);    }    tamanho++;}Caso a lista não esteja vazia,um novo item é criado com ovalor desejado. O novo itemse torna o último item dalista.
  41. 41. Tec. em Sistemas para Internet - IFMS 41Inserindo um novo item no finalpublic void adicionarNoFinal(Integer novoItem) {    if (tamanho == 0) {        ultimoItem = new No();        ultimoItem.setItem(novoItem);        primeiroItem = ultimoItem;    } else {        No antigoUltimoItem = ultimoItem;        ultimoItem = new No();        ultimoItem.setItem(novoItem);        antigoUltimoItem.setProximoItem(ultimoItem);    }    tamanho++;}Após o item ser inserido, otamanho da lista éincrementado em uma unidade.
  42. 42. Tec. em Sistemas para Internet - IFMS 42Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}
  43. 43. Tec. em Sistemas para Internet - IFMS 43Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Se a posição desejada forválida, então o novo item podeser inserido.
  44. 44. Tec. em Sistemas para Internet - IFMS 44Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Se a primeira posição for adesejada, então o método deinserção de itens no início dalista é chamado.
  45. 45. Tec. em Sistemas para Internet - IFMS 45Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Se a última posição for adesejada, então o método deinserção de itens no final dalista é chamado.
  46. 46. Tec. em Sistemas para Internet - IFMS 46Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Se a posição desejada não for aprimeira nem a última, então o métodopercorre a lista encadeada atéencontrar a posição desejada. Por fim,o item é inserido na posição correta.
  47. 47. Tec. em Sistemas para Internet - IFMS 47Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Se o item foi inserido comsucesso, o método retorna ovalor true indicando o fato.
  48. 48. Tec. em Sistemas para Internet - IFMS 48Inserindo um novo item em qualquer posiçãopublic boolean adicionarNaPosicao(Integer novoItem, int posicao) {    if (posicao >= 1 && posicao <= tamanho + 1) {        if (posicao == 1) {            adicionarNoInicio(novoItem);        } else if (posicao == tamanho + 1) {            adicionarNoFinal(novoItem);        } else {            No novoNo = new No();            novoNo.setItem(novoItem);            int contador = 1;            No itemAnteriorAoNovo = primeiroItem;            while (contador < posicao ­ 1) {                itemAnteriorAoNovo = itemAnteriorAoNovo.getProximoItem();                contador++;            }            novoNo.setProximoItem(itemAnteriorAoNovo.getProximoItem());            itemAnteriorAoNovo.setProximoItem(novoNo);            tamanho++;        }        return true;    }    return false;}Caso contrário, a posição desejadaera inválida e portanto o item não foiinserido. Assim, o método retorna ovalor false indicando tal fato.
  49. 49. Tec. em Sistemas para Internet - IFMS 49Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}
  50. 50. Tec. em Sistemas para Internet - IFMS 50Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}Se a posição é válida, ou seja,existe um item em tal posição,então o item pode ser removido.
  51. 51. Tec. em Sistemas para Internet - IFMS 51Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}O item a ser removido éencontrado.
  52. 52. Tec. em Sistemas para Internet - IFMS 52Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();       if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}Se o item a ser removido não foro primeiro, então o seu vizinhoanterior é ligado ao seu vizinhoposterior.
  53. 53. Tec. em Sistemas para Internet - IFMS 53Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}Se o item a ser removido for oprimeiro, então o seu vizinhoposterior se torna o novo primeiroitem da lista.
  54. 54. Tec. em Sistemas para Internet - IFMS 54Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}Após o item ser removido, otamanho da lista é decrementadoem uma unidade. Se a lista ficouvazia, então os ponteiros doprimeiro e último itens apontampara null. Se a lista ficou comapenas um item, então osponteiros do primeiro e últimoítens apontam para o único itemda lista. Se o item foi removidocom sucesso, o valor true éretornado indicando tal fato.
  55. 55. Tec. em Sistemas para Internet - IFMS 55Removendo um itempublic boolean remover(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        No anterior = null;        int contador = 1;        while (contador < posicao) {            anterior = item;            item = item.getProximoItem();            contador++;        }        No proximo = item.getProximoItem();        if (anterior != null) {            anterior.setProximoItem(proximo);        } else {            primeiroItem = proximo;        }        tamanho­­;        if (tamanho <= 1) {            primeiroItem = proximo;            ultimoItem = primeiroItem;        }        return true;    }    return false;}Se a posição for inválida, então ovalor false é retornado indicandotal fato.
  56. 56. Tec. em Sistemas para Internet - IFMS 56Pegando um item da listapublic No pegarItem(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        int contador = 1;        while (posicao < contador) {            item = item.getProximoItem();            contador++;        }        return item;    }    return null;}
  57. 57. Tec. em Sistemas para Internet - IFMS 57Pegando um item da listapublic No pegarItem(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        int contador = 1;        while (posicao < contador) {            item = item.getProximoItem();            contador++;        }        return item;    }    return null;}Se a posição é válida, ou seja,existe um item em tal posição,então o item pode ser retornado.
  58. 58. Tec. em Sistemas para Internet - IFMS 58Pegando um item da listapublic No pegarItem(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;       int contador = 1;       while (posicao < contador) {           item = item.getProximoItem();           contador++;       }       return item;    }    return null;}A lista encadeada é percorrida até sechegar na posição desejada.Quando a posição é alcançada,então o item correto é retornado.
  59. 59. Tec. em Sistemas para Internet - IFMS 59Pegando um item da listapublic No pegarItem(int posicao) {    if (tamanho > 0 && posicao >= 1 && posicao <= tamanho) {        No item = primeiroItem;        int contador = 1;        while (posicao < contador) {            item = item.getProximoItem();            contador++;        }        return item;    }    return null;}Se a posição desejada for inválida,então o valor null é retornado.
  60. 60. Tec. em Sistemas para Internet - IFMS 60Utilizando a classe ListaEncadeadaListaEncadeada listaEncadeada = new ListaEncadeada();listaEncadeada.adicionarNoInicio(­13);listaEncadeada.adicionarNoInicio(78);listaEncadeada.adicionarNoInicio(19823);listaEncadeada.adicionarNoFinal(500);listaEncadeada.adicionarNaPosicao(457, 2);No item = listaEncadeada.pegarItem(1);// Imprime na tela:// 19823 457 78 ­13 500while (item != null) {    System.out.print(item.getItem() + " ");    item = item.getProximoItem();}
  61. 61. Tec. em Sistemas para Internet - IFMS 61Listas duplamente encadeadas●Similares às listas encadeadas●Porém, cada item possui um ponteiro para osítens anterior e posterior a si na lista
  62. 62. Tec. em Sistemas para Internet - IFMS 62Representação da lista duplamente encadeadaitemproximoItemitemproximoItemitemproximoItemitemproximoItemNo No No NoitemAnterioritemAnterioritemAnterioritemAnterior
  63. 63. Tec. em Sistemas para Internet - IFMS 63Exemplo: Lista duplamente encadeadaClasses NoDuplo eListaDuplamenteEncadeada(abaixo no post)
  64. 64. Tec. em Sistemas para Internet - IFMS 64Exemplo: Lista duplamente encadeadaClasses NoDuplo eListaDuplamenteEncadeada(abaixo no post)?
  65. 65. Tec. em Sistemas para Internet - IFMS 65ExercícioImplemente as classes NoDuplo eListaDuplamenteEncadeada.
  66. 66. Tec. em Sistemas para Internet - IFMS 66Thats not all, folks!Na próxima aula falaremos mais sobre listas, masde uma forma mais suave...

×