Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLucian Helan Alterado mais de 7 anos atrás
1
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO
2
Link Copy 2 bit.do/facema-estrdados
3
Listas Simplesmente Encadeadas 3
4
Introdução Uma Lista Encadeada, em sua forma mais simples, é uma coleção de nós que juntos formam uma “lista linear”. Cada nó é um objeto que armazena uma referência para seu conteúdo e uma referência para o próximo nó. A referência que aponta para o próximo nó é chamada de NEXT. 4 Unidade II
5
5 Cada nó da lista deverá conter, além de informações a seu respeito, uma referência para o nó seguinte.
6
Listas Simplesmente Encadeadas Introdução A principal vantagem de se utilizar listas encadeadas está no fato de não ser preciso reservar um tamanho fixo. Nas operações de inserção/remoção nas extremidades não é necessário deslocamentos na lista. Entretanto, um nó da lista encadeada ocupa mais espaço em memória do que um elemento de um “vetor”. 6 Unidade II
7
Listas Simplesmente Encadeadas Introdução 7 Unidade II head TIM CNTCAX Ø THE COD tail Os ponteiros next de cada nó são representados como setas. O objeto null é denotado como ∅.
8
Listas Simplesmente Encadeadas Introdução A referência NEXT dentro de um nó pode ser vista como uma ligação / ponteiro para outro nó. O primeiro e o ultimo nó de uma lista encadeada são normalmente chamados de cabeça (head) e cauda (tail). Identifica-se a cauda por ser o nó que possui uma referência next nula, que indica o fim da lista. 8 Unidade II
9
Implementação 9
10
Listas Simplesmente Encadeadas Implementação Para implementar uma lista simplesmente encadeada, será definido uma classe Node. A qual especifica o tipo dos objetos que serão armazenados nos nós da lista. Aqui, assume-se que os elementos são Strings. 10 Unidade II
11
Listas Simplesmente Encadeadas Implementação Criar um “projeto” (caso não o tenha ainda) : – ED2015.2 Criar um “pacote” : – br.edu.facema.aulas.estr02 Classes: – Node – SimpleList – TestListaSimples 11 Unidade II
12
Listas Simplesmente Encadeadas Considerações – Representa um nó - criado a partir da classe Node. – Referência que “aponta” para o próximo nó da lista ( getNext() ou setNext() ). size: – Variável que “retorna” a quantidade de nós na lista. Quando um novo objeto é adicionado na lista, é incrementado +1 a variável e decrementado -1 quando um objeto é removido. 12 Unidade II ADS (next)
13
Listas Simplesmente Encadeadas Considerações head: – Objeto que representa o primeiro nó da lista. tail: – Objeto que representa o último nó da lista. 13 Unidade II
14
Listas Simplesmente Encadeadas – Classe que irá representar os Nodos 14 Unidade II public class Node { // Assumimos que os elementos são strings private String element; private Node next; public Node(String element) { this.element = element; } // Métodos getters e setters } Referência para um objeto de seu próprio tipo.
15
Listas Simplesmente Encadeadas Implementação – Classe que irá representar a Lista de Nodos 15 Unidade II public class SimpleList { // Nodo cabeça da lista private Node head; // Nodo cauda da lista private Node tail; // Número de nodos da lista private int size; public SimpleList() { head = null; tail = null; size = 0; } }
16
16 SimpleList (Métodos Auxiliares)
17
Listas Simplesmente Encadeadas Métodos Auxiliares size(): // Retorna int – Retorna o número de elementos armazenados. isEmpty(): // Retorna boolean – Indica se há ou não elementos na lista. 17 Unidade II
18
Listas Simplesmente Encadeadas Métodos Auxiliares – Deve ser criado dentro da classe SimpleList. 18 Unidade II // Retorna a quantidade de objetos na lista public int size() { return size; } // Informa se a lista está vazia public boolean isEmpty() { return size == 0; }
19
19 SimpleList (Métodos Principais)
20
Listas Simplesmente Encadeadas Métodos Principais adicionarInicio(object): – Insere um elemento no início. adicionarFim(object): – Insere um elemento no fim. removerComeco(): // Retorna Object – Remove e retorna o primeiro elemento. removerFinal(): // Retorna Object – Remove e retorna o último elemento. 20 Unidade II
21
21 Implementação
22
Listas Simplesmente Encadeadas Inserção no inicio: adicionaInicio(...) Passo-a-passo: – Criar um novo nó. – Definir que a referência Next do novo nó aponte para o objeto head. – Definir head para ser o novo nó. – Se a variável size for igual a ZERO, o novo nó passa a ser também o objeto tail. 22 Unidade II
23
Listas Simplesmente Encadeadas Exemplo: Inserção do início: 23 Unidade II TIM CNTCAX Ø head THE Lista vazia: head null tail null size 0 Ø head tail Lista com objetos: tail
24
Listas Simplesmente Encadeadas Inserção no início : adicionaInicio(...) – Código em Java Deve ser criado dentro da classe SimpleList 24 Unidade II public void adicionarInicio(String element) { Node no = new Node(element); no.setNext(head); head = no; if (size == 0) { // Caso a lista esteja vazia tail = no; } size++; }
25
Listas Simplesmente Encadeadas Inserção no início: adicionaInicio(...) – Teste 25 Unidade II public class TestListaSimples { public static void main(String[] args) { SimpleList lista = new SimpleList(); lista.adicionarInicio("Jeovane"); lista.adicionarInicio("Mario"); System.out.println(lista); } }
26
Listas Simplesmente Encadeadas Inserção no início: adicionaInicio(...) – Resultado 26 Unidade II [Mario, Jeovane] CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
27
Listas Simplesmente Encadeadas – Código em Java Deve ser criado dentro da classe SimpleList 27 Unidade II public String toString() { String s = "["; Node node = head; while (node != null) { s += node.getElement(); if (node != tail) { s += ", "; } node = node.getNext(); } return s + "]"; }
28
28 Implementação
29
Listas Simplesmente Encadeadas Inserção no final: adicionaFim (...) Passo-a-passo: – Criar um novo nó. – Atribuir null para a referência next do novo nó. – Fazer com que a referência next do objeto tail aponte para o novo nó. – Definir o novo nó como nó cauda (tail). 29 Unidade II
30
Listas Simplesmente Encadeadas Exemplo: Inserção do final: Lista com objetos: 30 Unidade II TIM CNTCAX Ø tail TIM CNTCAX Ø tail COD Ø Ø head
31
Listas Simplesmente Encadeadas Inserção no final: adicionaFim (...) – Código em Java – Deve ser criado dentro da classe SimpleList 31 Unidade II public void adicionarFim(String element) { Node no = new Node(element); } ?
32
Listas Simplesmente Encadeadas Inserção no final: adicionaFim (...) – Teste 32 Unidade II public class TestListaSimples { public static void main(String[] args) { SimpleList lista = new SimpleList(); // add no inicio.. lista.adicionarInicio("Jeovane"); lista.adicionarInicio("Mario"); // add no fim.. lista.adicionarFim("Pedro"); lista.adicionarFim("Eduardo"); System.out.println(lista); } }
33
Listas Simplesmente Encadeadas Inserção no final: adicionaFim (...) – Resultado 33 Unidade II [Mario, Jeovane, Pedro, Eduardo] CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
34
34 Implementação
35
Listas Simplesmente Encadeadas Remoção: removeComeco( ) Passo-a-Passo: – Verificar se a lista está vazia. Se estiver vazia uma mensagem de erro é lançada. Senão, o objeto é removido. 1.Antes de remover o objeto, seu conteúdo deve ser armazenado em uma variável temporária. 2.Fazer com que o nó que sucede o elemento head seja o novo nó cabeça ( head ). 3.Retornar o valor do passo 1. 35 Unidade II
36
Listas Simplesmente Encadeadas Exemplo: Remoção no início: Lista: 36 Unidade II TIM CNTCAX Ø head var temp = head size = 3 size = 2
37
Listas Simplesmente Encadeadas Remoção no início: removeComeco( ) – Código em Java – Deve ser criado dentro da classe SimpleList 37 Unidade II // Remove um Nodo do começo public String removerComeco() { if (isEmpty()) { throw new RuntimeException("Lista vazia"); } String temp = head.getElement(); head = head.getNext(); size--; return temp; }
38
Listas Simplesmente Encadeadas Remoção no início: removeComeco( ) – Teste 38 Unidade II public class TestListaSimples { public static void main(String[] args) { SimpleList lista = new SimpleList(); lista.adicionarInicio("Jeovane"); lista.adicionarInicio("Mario"); lista.adicionarInicio("Pedro"); // remove o primeiro elemento lista.removerComeco(); System.out.println(lista); } }
39
Listas Simplesmente Encadeadas Remoção no início: removeComeco( ) – Resultado 39 Unidade II [Mario, Jeovane] CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
40
40 Implementação
41
Listas Simplesmente Encadeadas Remoção no final : removeFinal( ) Passo-a-passo: – Verificar se a lista está vazia. Se estiver vazia uma mensagem de erro é lançada. Senão, o objeto é removido. 1.Percorrer toda a lista a partir do objeto head até o nó que antecede o objeto tail. 2.Armazenar o conteúdo do objeto tail em uma variável temporária. 3.Fazer com que o nó que antecede o elemento tail seja o novo nó cauda (tail). 4.Retornar o valor do passo 2. 41 Unidade II
42
Listas Simplesmente Encadeadas Exemplo: Remoção no final: Lista: 42 Unidade II TIM CNTCAX vvv TIM CNTCAX COD tail head COD tail Ø var temp = tail head size = 4 size = 3
43
Listas Simplesmente Encadeadas Remoção no final: removeFinal( ) – Deve ser criado dentro da classe SimpleList 43 Unidade II public String removerFinal() { if (isEmpty()) { throw new RuntimeException("Lista vazia"); } } ?
44
Listas Simplesmente Encadeadas Remoção no final: removeFinal( ) – Teste 44 Unidade II public class TestListaSimples { public static void main(String[] args) { SimpleList lista = new SimpleList(); lista.adicionarInicio("Jeovane"); lista.adicionarInicio("Mario"); lista.adicionarInicio("Pedro"); // remove o último elemento lista.removerFinal(); System.out.println(lista); } }
45
Listas Simplesmente Encadeadas Remoção no final: removeFinal( ) – Resultado 45 Unidade II [Pedro, Mario] CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.