SlideShare uma empresa Scribd logo
1 de 66
Baixar para ler offline
Tecnologia em Sistemas para Internet - IFMS
Aula 04 – Listas (parte 1)
Estruturas de Dados
Prof.º Msc. Sidney Roberto de Sousa
sidney.sousa@ifms.edu.br
Tec. em Sistemas para Internet - IFMS 2
O que veremos nesta aula?
●
O que é uma lista?
●
Listas simples
●
Listas encadeadas
●
Listas duplamente encadeadas
Tec. em Sistemas para Internet - IFMS 3
Lista
●
Estrutura de dados abstrata e linear que
implementa uma coleção finita e ordenada de
valores
●
Cada instância de um valor na lista é chamado
de ítem (ou elemento) da lista
Tec. em Sistemas para Internet - IFMS 4
Propriedades de uma lista
●
Tamanho: Número de itens armazenados na lista.
●
Índice: Cada elemento na lista possui um índice, ou seja, um
número que o identifica.
●
Tipo(*): Toda lista possui um tipo. Assim, todo item da lista possui
o 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 e
estruturas.
(* Na verdade, tanto na linguagem Java quanto na maioria das linguagens modernas, uma lista pode conter itens de tipos variados. Manteremos esta definição
por enquanto apenas por conveniência aos nossos estudos.)
Tec. em Sistemas para Internet - IFMS 5
Listas simples
●
Listas simples ou listas estáticas são listas
que permitem a adição de um número
limitado de itens → tamanho invariável
●
Neste tipo de lista, o acesso a um item situado
em um determinado índice é feito de forma
rápida e prática
●
Listas simples podem ser implementadas
como matrizes unidimensionais (vetores)
Tec. em Sistemas para Internet - IFMS 6
Exemplo: Lista simples
Classe ListaSimples
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 7
Inserção em uma lista simples
public boolean adicionarItem(Integer novoItem, int indiceDoItem) {
    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {
        lista[indiceDoItem] = novoItem;
        return true;
    }
    return false;
}
Tec. em Sistemas para Internet - IFMS 8
Inserção em uma lista simples
public 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 do
novo elemento é válida.
Tec. em Sistemas para Internet - IFMS 9
Inserção em uma lista simples
public 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 na
posição desejada. Caso já haja um outro elemento nesta
posição, tal elemento é sobreposto pelo novo elemento.
O método retorna o valor true, indicando que o elemento
foi inserido com sucesso.
Tec. em Sistemas para Internet - IFMS 10
Inserção em uma lista simples
public 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.
Tec. em Sistemas para Internet - IFMS 11
Remoção em uma lista simples
public Integer removerItem(Integer indiceDoItem) {
    if (indiceDoItem >= 0 && indiceDoItem < tamanho
        && lista[indiceDoItem] != null) {
        Integer itemRemovido = lista[indiceDoItem];
        lista[indiceDoItem] = null;
        return itemRemovido;
    }
    return null;
}
Tec. em Sistemas para Internet - IFMS 12
Remoção em uma lista simples
public 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 na
posição desejada. Também verifica se tal posição é
válida.
Tec. em Sistemas para Internet - IFMS 13
Remoção em uma lista simples
public 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 exista
algum elemento a ser removido, o elemento é
“removido” ao se substituir o seu valor pelo valor
null. Por fim, o método retorna o valor do item
recém removido.
Tec. em Sistemas para Internet - IFMS 14
Remoção em uma lista simples
public 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ão
exista um elemento a ser removido, o método
retorna o valor null.
Tec. em Sistemas para Internet - IFMS 15
Pegando um elemento de uma lista simples
public Integer pegarItem(Integer indiceDoItem) {
    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {
        return lista[indiceDoItem];
    }
    return null;
}
Tec. em Sistemas para Internet - IFMS 16
Pegando um elemento de uma lista simples
public Integer pegarItem(Integer indiceDoItem) {
    if (indiceDoItem >= 0 && indiceDoItem < tamanho) {
        return lista[indiceDoItem];
    }
    return null;
}
Primeiramente, o método verifica se a posição do item
desejado é válida.
Tec. em Sistemas para Internet - IFMS 17
Pegando um elemento de uma lista simples
public 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 índice
correto. Caso nenhum elemento tenha sido
adicionado nesta posição, o valor null é retornado.
Tec. em Sistemas para Internet - IFMS 18
Pegando um elemento de uma lista simples
public 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.
Tec. em Sistemas para Internet - IFMS 19
Utilizando a classe ListaSimples
ListaSimples 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 
 */
Tec. em Sistemas para Internet - IFMS 20
Listas encadeadas
●
Listas encadeadas ou listas ligadas são
listas dinâmicas que permitem a adição de
um 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 o
próximo elemento da lista
Tec. em Sistemas para Internet - IFMS 21
Exemplo: Lista encadeada
Classes No e ListaEncadeada
(abaixo no post)
Tec. em Sistemas para Internet - IFMS 22
Classe No
public class No {
    private Integer item;
    private No proximoItem;
    public No() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Tec. em Sistemas para Internet - IFMS 23
Classe No
public class No {
    private Integer item;
    private No proximoItem;
    public No() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Encapsula um item
na lista encadeada
Tec. em Sistemas para Internet - IFMS 24
Classe No
public class No {
    private Integer item;
    private No proximoItem;
    public No() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Armazena o valor
do item
Tec. em Sistemas para Internet - IFMS 25
Classe No
public class No {
    private Integer item;
    private No proximoItem;
    public No() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Ponteiro (link) para o
próximo item da lista
encadeada
Tec. em Sistemas para Internet - IFMS 26
Classe No
public class No {
    private Integer item;
    private No proximoItem;
    public No() {
        proximoItem = null;
    }
    // Getters e setters para os atributos da classe...
}
Construtor da classe
No. Inicializa o atributo
proximoItem com o
valor null. Isto indica
que inicialmente o item
não estão ligado a um
próximo item.
Tec. em Sistemas para Internet - IFMS 27
Representação da lista encadeada
item
proximoItem
item
proximoItem
item
proximoItem
item
proximoItem
No No No No
Tec. em Sistemas para Internet - IFMS 28
Classe ListaEncadeada
public class ListaEncadeada {
    private int tamanho;
    private No primeiroItem;
    private No ultimoItem;
   
    public ListaEncadeada() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Tec. em Sistemas para Internet - IFMS 29
Classe ListaEncadeada
public class ListaEncadeada {
    private int tamanho;
    private No primeiroItem;
    private No ultimoItem;
   
    public ListaEncadeada() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Encapsula uma lista
encadeada, onde cada
item da lista é
encapsulado pela classe
No. Contém as
operações sobre a lista.
Tec. em Sistemas para Internet - IFMS 30
Classe ListaEncadeada
public 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 da
lista, ou seja, o número
de ítens contidos nela.
Tec. em Sistemas para Internet - IFMS 31
Classe ListaEncadeada
public class ListaEncadeada {
    private int tamanho;
    private No primeiroItem;
    private No ultimoItem;
   
    public ListaEncadeada() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Guarda o primeiro
item da lista.
Tec. em Sistemas para Internet - IFMS 32
Classe ListaEncadeada
public class ListaEncadeada {
    private int tamanho;
    private No primeiroItem;
    private No ultimoItem;
   
    public ListaEncadeada() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Guarda o último
item da lista.
Tec. em Sistemas para Internet - IFMS 33
Classe ListaEncadeada
public class ListaEncadeada {
    private int tamanho;
    private No primeiroItem;
    private No ultimoItem;
   
    public ListaEncadeada() {
        primeiroItem = null;
        ultimoItem = null;
        tamanho = 0;
    }
    // Restante da classe...
}
Construtor da classe
ListaEncadeada.
Inicializa os atributos
da classe, sinalizando
que a lista ainda não
possui elementos.
Tec. em Sistemas para Internet - IFMS 34
Inserindo um novo item no início
public 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++;
}
Tec. em Sistemas para Internet - IFMS 35
Inserindo um novo item no início
public 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 esteja
vazia, um novo item é
criado com o valor
desejado. O novo item
se torna o primeiro e o
último item da lista
simultaneamente.
Tec. em Sistemas para Internet - IFMS 36
Inserindo um novo item no início
public 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 o
valor desejado. O novo item
se torna o primeiro item da
lista.
Tec. em Sistemas para Internet - IFMS 37
Inserindo um novo item no início
public 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, o
tamanho da lista é
incrementado em uma unidade.
Tec. em Sistemas para Internet - IFMS 38
Inserindo um novo item no final
public 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++;
}
Tec. em Sistemas para Internet - IFMS 39
Inserindo um novo item no final
public 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 esteja
vazia, um novo item é
criado com o valor
desejado. O novo item
se torna o primeiro e o
último item da lista
simultaneamente.
Tec. em Sistemas para Internet - IFMS 40
Inserindo um novo item no final
public 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 o
valor desejado. O novo item
se torna o último item da
lista.
Tec. em Sistemas para Internet - IFMS 41
Inserindo um novo item no final
public 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, o
tamanho da lista é
incrementado em uma unidade.
Tec. em Sistemas para Internet - IFMS 42
Inserindo um novo item em qualquer posição
public 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;
}
Tec. em Sistemas para Internet - IFMS 43
Inserindo um novo item em qualquer posição
public 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 for
válida, então o novo item pode
ser inserido.
Tec. em Sistemas para Internet - IFMS 44
Inserindo um novo item em qualquer posição
public 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 a
desejada, então o método de
inserção de itens no início da
lista é chamado.
Tec. em Sistemas para Internet - IFMS 45
Inserindo um novo item em qualquer posição
public 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 a
desejada, então o método de
inserção de itens no final da
lista é chamado.
Tec. em Sistemas para Internet - IFMS 46
Inserindo um novo item em qualquer posição
public 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 a
primeira nem a última, então o método
percorre a lista encadeada até
encontrar a posição desejada. Por fim,
o item é inserido na posição correta.
Tec. em Sistemas para Internet - IFMS 47
Inserindo um novo item em qualquer posição
public 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 com
sucesso, o método retorna o
valor true indicando o fato.
Tec. em Sistemas para Internet - IFMS 48
Inserindo um novo item em qualquer posição
public 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 desejada
era inválida e portanto o item não foi
inserido. Assim, o método retorna o
valor false indicando tal fato.
Tec. em Sistemas para Internet - IFMS 49
Removendo um item
public 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;
}
Tec. em Sistemas para Internet - IFMS 50
Removendo um item
public 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.
Tec. em Sistemas para Internet - IFMS 51
Removendo um item
public 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.
Tec. em Sistemas para Internet - IFMS 52
Removendo um item
public 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 for
o primeiro, então o seu vizinho
anterior é ligado ao seu vizinho
posterior.
Tec. em Sistemas para Internet - IFMS 53
Removendo um item
public 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 o
primeiro, então o seu vizinho
posterior se torna o novo primeiro
item da lista.
Tec. em Sistemas para Internet - IFMS 54
Removendo um item
public 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, o
tamanho da lista é decrementado
em uma unidade. Se a lista ficou
vazia, então os ponteiros do
primeiro e último itens apontam
para null. Se a lista ficou com
apenas um item, então os
ponteiros do primeiro e último
ítens apontam para o único item
da lista. Se o item foi removido
com sucesso, o valor true é
retornado indicando tal fato.
Tec. em Sistemas para Internet - IFMS 55
Removendo um item
public 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 o
valor false é retornado indicando
tal fato.
Tec. em Sistemas para Internet - IFMS 56
Pegando um item da lista
public 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;
}
Tec. em Sistemas para Internet - IFMS 57
Pegando um item da lista
public 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.
Tec. em Sistemas para Internet - IFMS 58
Pegando um item da lista
public 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é se
chegar na posição desejada.
Quando a posição é alcançada,
então o item correto é retornado.
Tec. em Sistemas para Internet - IFMS 59
Pegando um item da lista
public 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.
Tec. em Sistemas para Internet - IFMS 60
Utilizando a classe ListaEncadeada
ListaEncadeada 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 500
while (item != null) {
    System.out.print(item.getItem() + " ");
    item = item.getProximoItem();
}
Tec. em Sistemas para Internet - IFMS 61
Listas duplamente encadeadas
●
Similares às listas encadeadas
●
Porém, cada item possui um ponteiro para os
ítens anterior e posterior a si na lista
Tec. em Sistemas para Internet - IFMS 62
Representação da lista duplamente encadeada
item
proximoItem
item
proximoItem
item
proximoItem
item
proximoItem
No No No No
itemAnterior
itemAnterior
itemAnterior
itemAnterior
Tec. em Sistemas para Internet - IFMS 63
Exemplo: Lista duplamente encadeada
Classes NoDuplo e
ListaDuplamenteEncadeada
(abaixo no post)
Tec. em Sistemas para Internet - IFMS 64
Exemplo: Lista duplamente encadeada
Classes NoDuplo e
ListaDuplamenteEncadeada
(abaixo no post)
?
Tec. em Sistemas para Internet - IFMS 65
Exercício
Implemente as classes NoDuplo e
ListaDuplamenteEncadeada.
Tec. em Sistemas para Internet - IFMS 66
That's not all, folks!
Na próxima aula falaremos mais sobre listas, mas
de uma forma mais suave...

Mais conteúdo relacionado

Destaque (20)

Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Classes e Objetos
Classes e ObjetosClasses e Objetos
Classes e Objetos
 
Apostila - Linguagem de Programação I
Apostila - Linguagem de Programação IApostila - Linguagem de Programação I
Apostila - Linguagem de Programação I
 
Aula 03 - Mecanismos da Percepção Humana
Aula 03  - Mecanismos da Percepção HumanaAula 03  - Mecanismos da Percepção Humana
Aula 03 - Mecanismos da Percepção Humana
 
La uva
La uvaLa uva
La uva
 
4 cuenta de correo gmail
4 cuenta de correo gmail4 cuenta de correo gmail
4 cuenta de correo gmail
 
Uhf regulations
Uhf regulationsUhf regulations
Uhf regulations
 
Cetis 109
Cetis 109Cetis 109
Cetis 109
 
Ecology
EcologyEcology
Ecology
 
68060200610
6806020061068060200610
68060200610
 
Lección 10 problemas dinámicos
Lección 10 problemas dinámicosLección 10 problemas dinámicos
Lección 10 problemas dinámicos
 
concectos de internet
concectos de internetconcectos de internet
concectos de internet
 
Seguridad Vial: Espejo
Seguridad Vial: EspejoSeguridad Vial: Espejo
Seguridad Vial: Espejo
 
Play penconsultoria
Play penconsultoriaPlay penconsultoria
Play penconsultoria
 
Napoleón
NapoleónNapoleón
Napoleón
 
Yahoo.com.mx
Yahoo.com.mxYahoo.com.mx
Yahoo.com.mx
 
Sistemas Honeynet
Sistemas HoneynetSistemas Honeynet
Sistemas Honeynet
 
Mates tema 0
Mates tema 0Mates tema 0
Mates tema 0
 
Zimbra COMO DEBEMOS UTILIZARLO
Zimbra COMO DEBEMOS UTILIZARLOZimbra COMO DEBEMOS UTILIZARLO
Zimbra COMO DEBEMOS UTILIZARLO
 
Conhecendo o br office.org 2.0 write
Conhecendo o br office.org 2.0  writeConhecendo o br office.org 2.0  write
Conhecendo o br office.org 2.0 write
 

Semelhante a Listas simples e encadeadas

Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)rdgse
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleçõesMaurício Linhares
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetosunifesptk
 
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 Javadanrleywillian1
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecasMaurício Linhares
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dadosRicardo Bolanho
 

Semelhante a Listas simples e encadeadas (20)

Java 12 Colecoes
Java 12 ColecoesJava 12 Colecoes
Java 12 Colecoes
 
Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetos
 
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
 
Aula 2 2
Aula 2 2 Aula 2 2
Aula 2 2
 
Curso java 04 - ap is e bibliotecas
Curso java   04 - ap is e bibliotecasCurso java   04 - ap is e bibliotecas
Curso java 04 - ap is e bibliotecas
 
Grupo2
Grupo2Grupo2
Grupo2
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Array list
Array listArray list
Array list
 
Lista de inteiros
Lista de inteirosLista de inteiros
Lista de inteiros
 
Java8
Java8Java8
Java8
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
String
StringString
String
 
Capítulo 6
Capítulo 6Capítulo 6
Capítulo 6
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
Aula05
Aula05Aula05
Aula05
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
11 tipos abstratos de dados
11   tipos abstratos de dados11   tipos abstratos de dados
11 tipos abstratos de dados
 

Mais de Sidney Roberto

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerdSidney Roberto
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBSidney Roberto
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVSidney Roberto
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVSidney Roberto
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQSidney Roberto
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoSidney Roberto
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonSidney Roberto
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaSidney Roberto
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaSidney Roberto
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQSidney Roberto
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroSidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Sidney Roberto
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Sidney Roberto
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em JavaSidney Roberto
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de ProgramasSidney Roberto
 
O que é Interação Humano-Computador?
O que é Interação Humano-Computador?O que é Interação Humano-Computador?
O que é Interação Humano-Computador?Sidney Roberto
 

Mais de Sidney Roberto (20)

Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Personagens negros na cultura nerd
Personagens negros na cultura nerdPersonagens negros na cultura nerd
Personagens negros na cultura nerd
 
Mantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDBMantendo os dados do seu app web offline com PouchDB
Mantendo os dados do seu app web offline com PouchDB
 
Regulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IVRegulamento da batalha campal do DCN IV
Regulamento da batalha campal do DCN IV
 
Regulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IVRegulamento dos concursos de cosplay e cospobre do DCN IV
Regulamento dos concursos de cosplay e cospobre do DCN IV
 
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQRegulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
Regulamento Cosplay e Cospobre - DCN 3 IFMS-AQ
 
Tecnologias e Mercado de Trabalho
Tecnologias e Mercado de TrabalhoTecnologias e Mercado de Trabalho
Tecnologias e Mercado de Trabalho
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com Python
 
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS AquidauanaPalestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
Palestra de boas vindas aos estudantes do curso TSI do IFMS Aquidauana
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQRegulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
Regulamento do Concurso de Cosplay - Dia da Cultura Nerd IFMS-AQ
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Minha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiroMinha opinião sobre o sistema educacional de base brasileiro
Minha opinião sobre o sistema educacional de base brasileiro
 
Listas (parte 2 de 3)
Listas (parte 2 de 3)Listas (parte 2 de 3)
Listas (parte 2 de 3)
 
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
Vamos aprender algo diferente? Introdução à linguagem Python (parte 2)
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
 
Compilando em java
Compilando em javaCompilando em java
Compilando em java
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
 
O que é Interação Humano-Computador?
O que é Interação Humano-Computador?O que é Interação Humano-Computador?
O que é Interação Humano-Computador?
 

Listas simples e encadeadas

  • 1. Tecnologia em Sistemas para Internet - IFMS Aula 04 – Listas (parte 1) Estruturas de Dados Prof.º Msc. Sidney Roberto de Sousa sidney.sousa@ifms.edu.br
  • 2. Tec. em Sistemas para Internet - IFMS 2 O que veremos nesta aula? ● O que é uma lista? ● Listas simples ● Listas encadeadas ● Listas duplamente encadeadas
  • 3. Tec. em Sistemas para Internet - IFMS 3 Lista ● Estrutura de dados abstrata e linear que implementa uma coleção finita e ordenada de valores ● Cada instância de um valor na lista é chamado de ítem (ou elemento) da lista
  • 4. Tec. em Sistemas para Internet - IFMS 4 Propriedades de uma lista ● Tamanho: Número de itens armazenados na lista. ● Índice: Cada elemento na lista possui um índice, ou seja, um número que o identifica. ● Tipo(*): Toda lista possui um tipo. Assim, todo item da lista possui o 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 e estruturas. (* Na verdade, tanto na linguagem Java quanto na maioria das linguagens modernas, uma lista pode conter itens de tipos variados. Manteremos esta definição por enquanto apenas por conveniência aos nossos estudos.)
  • 5. Tec. em Sistemas para Internet - IFMS 5 Listas simples ● Listas simples ou listas estáticas são listas que permitem a adição de um número limitado de itens → tamanho invariável ● Neste tipo de lista, o acesso a um item situado em um determinado índice é feito de forma rápida e prática ● Listas simples podem ser implementadas como matrizes unidimensionais (vetores)
  • 6. Tec. em Sistemas para Internet - IFMS 6 Exemplo: Lista simples Classe ListaSimples (abaixo no blog)
  • 7. Tec. em Sistemas para Internet - IFMS 7 Inserção em uma lista simples public boolean adicionarItem(Integer novoItem, int indiceDoItem) {     if (indiceDoItem >= 0 && indiceDoItem < tamanho) {         lista[indiceDoItem] = novoItem;         return true;     }     return false; }
  • 8. Tec. em Sistemas para Internet - IFMS 8 Inserção em uma lista simples public 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 do novo elemento é válida.
  • 9. Tec. em Sistemas para Internet - IFMS 9 Inserção em uma lista simples public 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 na posição desejada. Caso já haja um outro elemento nesta posição, tal elemento é sobreposto pelo novo elemento. O método retorna o valor true, indicando que o elemento foi inserido com sucesso.
  • 10. Tec. em Sistemas para Internet - IFMS 10 Inserção em uma lista simples public 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. Tec. em Sistemas para Internet - IFMS 11 Remoção em uma lista simples public Integer removerItem(Integer indiceDoItem) {     if (indiceDoItem >= 0 && indiceDoItem < tamanho         && lista[indiceDoItem] != null) {         Integer itemRemovido = lista[indiceDoItem];         lista[indiceDoItem] = null;         return itemRemovido;     }     return null; }
  • 12. Tec. em Sistemas para Internet - IFMS 12 Remoção em uma lista simples public 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 na posição desejada. Também verifica se tal posição é válida.
  • 13. Tec. em Sistemas para Internet - IFMS 13 Remoção em uma lista simples public 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 exista algum elemento a ser removido, o elemento é “removido” ao se substituir o seu valor pelo valor null. Por fim, o método retorna o valor do item recém removido.
  • 14. Tec. em Sistemas para Internet - IFMS 14 Remoção em uma lista simples public 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ão exista um elemento a ser removido, o método retorna o valor null.
  • 15. Tec. em Sistemas para Internet - IFMS 15 Pegando um elemento de uma lista simples public Integer pegarItem(Integer indiceDoItem) {     if (indiceDoItem >= 0 && indiceDoItem < tamanho) {         return lista[indiceDoItem];     }     return null; }
  • 16. Tec. em Sistemas para Internet - IFMS 16 Pegando um elemento de uma lista simples public Integer pegarItem(Integer indiceDoItem) {     if (indiceDoItem >= 0 && indiceDoItem < tamanho) {         return lista[indiceDoItem];     }     return null; } Primeiramente, o método verifica se a posição do item desejado é válida.
  • 17. Tec. em Sistemas para Internet - IFMS 17 Pegando um elemento de uma lista simples public 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 índice correto. Caso nenhum elemento tenha sido adicionado nesta posição, o valor null é retornado.
  • 18. Tec. em Sistemas para Internet - IFMS 18 Pegando um elemento de uma lista simples public 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. Tec. em Sistemas para Internet - IFMS 19 Utilizando a classe ListaSimples ListaSimples 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. Tec. em Sistemas para Internet - IFMS 20 Listas encadeadas ● Listas encadeadas ou listas ligadas são listas dinâmicas que permitem a adição de um 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 o próximo elemento da lista
  • 21. Tec. em Sistemas para Internet - IFMS 21 Exemplo: Lista encadeada Classes No e ListaEncadeada (abaixo no post)
  • 22. Tec. em Sistemas para Internet - IFMS 22 Classe No public class No {     private Integer item;     private No proximoItem;     public No() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... }
  • 23. Tec. em Sistemas para Internet - IFMS 23 Classe No public class No {     private Integer item;     private No proximoItem;     public No() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } Encapsula um item na lista encadeada
  • 24. Tec. em Sistemas para Internet - IFMS 24 Classe No public class No {     private Integer item;     private No proximoItem;     public No() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } Armazena o valor do item
  • 25. Tec. em Sistemas para Internet - IFMS 25 Classe No public class No {     private Integer item;     private No proximoItem;     public No() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } Ponteiro (link) para o próximo item da lista encadeada
  • 26. Tec. em Sistemas para Internet - IFMS 26 Classe No public class No {     private Integer item;     private No proximoItem;     public No() {         proximoItem = null;     }     // Getters e setters para os atributos da classe... } Construtor da classe No. Inicializa o atributo proximoItem com o valor null. Isto indica que inicialmente o item não estão ligado a um próximo item.
  • 27. Tec. em Sistemas para Internet - IFMS 27 Representação da lista encadeada item proximoItem item proximoItem item proximoItem item proximoItem No No No No
  • 28. Tec. em Sistemas para Internet - IFMS 28 Classe ListaEncadeada public class ListaEncadeada {     private int tamanho;     private No primeiroItem;     private No ultimoItem;         public ListaEncadeada() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... }
  • 29. Tec. em Sistemas para Internet - IFMS 29 Classe ListaEncadeada public class ListaEncadeada {     private int tamanho;     private No primeiroItem;     private No ultimoItem;         public ListaEncadeada() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } Encapsula uma lista encadeada, onde cada item da lista é encapsulado pela classe No. Contém as operações sobre a lista.
  • 30. Tec. em Sistemas para Internet - IFMS 30 Classe ListaEncadeada public 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 da lista, ou seja, o número de ítens contidos nela.
  • 31. Tec. em Sistemas para Internet - IFMS 31 Classe ListaEncadeada public class ListaEncadeada {     private int tamanho;     private No primeiroItem;     private No ultimoItem;         public ListaEncadeada() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } Guarda o primeiro item da lista.
  • 32. Tec. em Sistemas para Internet - IFMS 32 Classe ListaEncadeada public class ListaEncadeada {     private int tamanho;     private No primeiroItem;     private No ultimoItem;         public ListaEncadeada() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } Guarda o último item da lista.
  • 33. Tec. em Sistemas para Internet - IFMS 33 Classe ListaEncadeada public class ListaEncadeada {     private int tamanho;     private No primeiroItem;     private No ultimoItem;         public ListaEncadeada() {         primeiroItem = null;         ultimoItem = null;         tamanho = 0;     }     // Restante da classe... } Construtor da classe ListaEncadeada. Inicializa os atributos da classe, sinalizando que a lista ainda não possui elementos.
  • 34. Tec. em Sistemas para Internet - IFMS 34 Inserindo um novo item no início public 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. Tec. em Sistemas para Internet - IFMS 35 Inserindo um novo item no início public 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 esteja vazia, um novo item é criado com o valor desejado. O novo item se torna o primeiro e o último item da lista simultaneamente.
  • 36. Tec. em Sistemas para Internet - IFMS 36 Inserindo um novo item no início public 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 o valor desejado. O novo item se torna o primeiro item da lista.
  • 37. Tec. em Sistemas para Internet - IFMS 37 Inserindo um novo item no início public 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, o tamanho da lista é incrementado em uma unidade.
  • 38. Tec. em Sistemas para Internet - IFMS 38 Inserindo um novo item no final public 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. Tec. em Sistemas para Internet - IFMS 39 Inserindo um novo item no final public 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 esteja vazia, um novo item é criado com o valor desejado. O novo item se torna o primeiro e o último item da lista simultaneamente.
  • 40. Tec. em Sistemas para Internet - IFMS 40 Inserindo um novo item no final public 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 o valor desejado. O novo item se torna o último item da lista.
  • 41. Tec. em Sistemas para Internet - IFMS 41 Inserindo um novo item no final public 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, o tamanho da lista é incrementado em uma unidade.
  • 42. Tec. em Sistemas para Internet - IFMS 42 Inserindo um novo item em qualquer posição public 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. Tec. em Sistemas para Internet - IFMS 43 Inserindo um novo item em qualquer posição public 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 for válida, então o novo item pode ser inserido.
  • 44. Tec. em Sistemas para Internet - IFMS 44 Inserindo um novo item em qualquer posição public 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 a desejada, então o método de inserção de itens no início da lista é chamado.
  • 45. Tec. em Sistemas para Internet - IFMS 45 Inserindo um novo item em qualquer posição public 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 a desejada, então o método de inserção de itens no final da lista é chamado.
  • 46. Tec. em Sistemas para Internet - IFMS 46 Inserindo um novo item em qualquer posição public 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 a primeira nem a última, então o método percorre a lista encadeada até encontrar a posição desejada. Por fim, o item é inserido na posição correta.
  • 47. Tec. em Sistemas para Internet - IFMS 47 Inserindo um novo item em qualquer posição public 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 com sucesso, o método retorna o valor true indicando o fato.
  • 48. Tec. em Sistemas para Internet - IFMS 48 Inserindo um novo item em qualquer posição public 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 desejada era inválida e portanto o item não foi inserido. Assim, o método retorna o valor false indicando tal fato.
  • 49. Tec. em Sistemas para Internet - IFMS 49 Removendo um item public 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. Tec. em Sistemas para Internet - IFMS 50 Removendo um item public 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. Tec. em Sistemas para Internet - IFMS 51 Removendo um item public 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. Tec. em Sistemas para Internet - IFMS 52 Removendo um item public 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 for o primeiro, então o seu vizinho anterior é ligado ao seu vizinho posterior.
  • 53. Tec. em Sistemas para Internet - IFMS 53 Removendo um item public 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 o primeiro, então o seu vizinho posterior se torna o novo primeiro item da lista.
  • 54. Tec. em Sistemas para Internet - IFMS 54 Removendo um item public 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, o tamanho da lista é decrementado em uma unidade. Se a lista ficou vazia, então os ponteiros do primeiro e último itens apontam para null. Se a lista ficou com apenas um item, então os ponteiros do primeiro e último ítens apontam para o único item da lista. Se o item foi removido com sucesso, o valor true é retornado indicando tal fato.
  • 55. Tec. em Sistemas para Internet - IFMS 55 Removendo um item public 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 o valor false é retornado indicando tal fato.
  • 56. Tec. em Sistemas para Internet - IFMS 56 Pegando um item da lista public 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. Tec. em Sistemas para Internet - IFMS 57 Pegando um item da lista public 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. Tec. em Sistemas para Internet - IFMS 58 Pegando um item da lista public 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é se chegar na posição desejada. Quando a posição é alcançada, então o item correto é retornado.
  • 59. Tec. em Sistemas para Internet - IFMS 59 Pegando um item da lista public 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. Tec. em Sistemas para Internet - IFMS 60 Utilizando a classe ListaEncadeada ListaEncadeada 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 500 while (item != null) {     System.out.print(item.getItem() + " ");     item = item.getProximoItem(); }
  • 61. Tec. em Sistemas para Internet - IFMS 61 Listas duplamente encadeadas ● Similares às listas encadeadas ● Porém, cada item possui um ponteiro para os ítens anterior e posterior a si na lista
  • 62. Tec. em Sistemas para Internet - IFMS 62 Representação da lista duplamente encadeada item proximoItem item proximoItem item proximoItem item proximoItem No No No No itemAnterior itemAnterior itemAnterior itemAnterior
  • 63. Tec. em Sistemas para Internet - IFMS 63 Exemplo: Lista duplamente encadeada Classes NoDuplo e ListaDuplamenteEncadeada (abaixo no post)
  • 64. Tec. em Sistemas para Internet - IFMS 64 Exemplo: Lista duplamente encadeada Classes NoDuplo e ListaDuplamenteEncadeada (abaixo no post) ?
  • 65. Tec. em Sistemas para Internet - IFMS 65 Exercício Implemente as classes NoDuplo e ListaDuplamenteEncadeada.
  • 66. Tec. em Sistemas para Internet - IFMS 66 That's not all, folks! Na próxima aula falaremos mais sobre listas, mas de uma forma mais suave...