Listas Encadeadas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Documentos relacionados
INF1007: Programação 2 8 Listas Encadeadas. (c) Dept. Informática - PUC-Rio 1

Instituto de C. Linguagem C: Listas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Módulo 10 Listas Encadeadas

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas de Dados Aula 12: Outras Implementações de Listas 18/04/2011

Fontes Bibliográficas. Listas Circulares. Função Imprime

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Introdução a Programação. Listas Encadeadas

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Métodos Computacionais. Listas Encadeadas

Estrutura de Dados Listas

Estruturas de Dados Filas

INF1007 Programação 2 9 Pilhas. (c) Dept. Informática - PUC-Rio 1

Listas Lineares. continuando...

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 9

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Estruturas de Dados. Módulo 11 Pilhas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

INF 1007 Programação II

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Listas Lineares Ordenadas

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

INF1007: Programação Funções Recursivas. 12/03/2014 (c) Dept. Informática - PUC-Rio 1

INF 1007 Programação II

Métodos Computacionais. Variações de Listas Encadeadas

Pilhas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Busca. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

12. Filas Interface do tipo fila

UFJF - DCC - Estrutura de Dados e Laboratório de Programação II

Prof. Jesus José de Oliveira Neto

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Programação de Computadores II. Cap. 4 Funções

Lista Encadeada (Linked List)

Prof. Jesus José de Oliveira Neto

Módulo 8 Tipos Estruturados

Módulo 14 - Estruturas genéricas

INF 1007 Programação II

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Programação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida

Introdução à Programação

INF 1007 Programação II

INF 1620 P2-01/11/03 Questão 1 Nome:

Programação de Computadores II. Cap. 5 Vetores

Estruturas de Dados Aula 17: Estruturas Genéricas 15/06/2011

Estruturas de Dados Aula 16: Árvores com Número Variável 13/06/2011

Módulo 7 Cadeias de Caracteres

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Estruturas de Dados Aula 11: TAD Pilha

INF1007: Programação 2. 4 Tipos Estruturados. 10/23/09 (c) Dept. Informática - PUC-Rio 1

PRIMEIRA AVALIAÇÃO IDENTIFICAÇÃO. Nome: 22/09/2010

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas

Programação de Computadores II. Cap. 17 Busca

Professora Jeane Melo

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

Módulo 18 - Tabelas de Dispersão. Referências

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I

INF 1007 Programação II

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Árvores Binárias de Busca

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

BCC202 - Estrutura de Dados I

Aula 05: Listas Encadeadas. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Estruturas de Dados Encadeadas

Estruturas de Dados I

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

INF1007: Programação 2. 2 Alocação Dinâmica. 17/02/2014 (c) Dept. Informática - PUC-Rio 1

Estrutura de Dados (DPADF 0056)

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

CES-11. Algoritmos e Estruturas de Dados. Árvores Operações sobre uma árvore Estruturas para armazenar árvores

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Estruturas de Dados Aula 10: Listas (parte 2) 19/04/2011

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

GRAFOS E DIGRAFOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

INF P4-12/12/09 Questão 1 Nome:

PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco

Atividade de laboratório listas encadeadas simples

INF 1620 P2-23/10/04 Questão 1 Nome:

Módulo 5 Vetores e Alocação Dinâmica

Transcrição:

Listas Encadeadas Fabrício J. Barth BandTec - Faculdade de Tecnologia Bandeirantes Fevereiro de 2011

Tópicos Principais Motivação Listas encadeadas Implementações recursivas Listas de tipos estruturados Listas Encadeadas Tópicos Principais Faculdade de Tecnologia Bandeirantes 2

Tópicos complementares Listas circulares Listas duplamente encadeadas Listas Encadeadas Tópicos complementares Faculdade de Tecnologia Bandeirantes 3

Tópicos Principais 4

Motivação Vetor: ocupa um espaço contíguo de memória permite acesso randômico aos elementos deve ser dimensionado com um número máximo de elementos Tópicos Principais Motivação Faculdade de Tecnologia Bandeirantes 5

Motivação Estruturas de dados dinâmicas: crescem ou decrescem à medida que elementos são inseridos ou removidos. Exemplo: listas encadeadas. Listas encadeadas são amplamentes utilizadas para implementar outras estruturas de dados. Tópicos Principais Motivação Faculdade de Tecnologia Bandeirantes 6

Listas Encadeadas sequência encadeada de elementos, chamados nós da lista. nó da lista é representado por dois campos: a informação armazenada e o ponteiro para o próximo elemento da lista Tópicos Principais Listas Encadeadas Faculdade de Tecnologia Bandeirantes 7

a lista é representada por um ponteiro para o primeiro nó o ponteiro do último elemento é NULL. Tópicos Principais Listas Encadeadas Faculdade de Tecnologia Bandeirantes 8

Estrutura com ponteiro para ela mesma 1 class Nodo { 2 private int info; 3 private Nodo prox; 4 5 public int getinfo() { 6 return info; 7 } 8 public void setinfo(int info) { 9 this.info = info; 10 } 11 public Nodo getprox() { 12 return prox; 13 } 14 public void setprox(nodo prox) { 15 this.prox = prox; 16 } 17 } Tópicos Principais Estrutura com ponteiro para ela mesma Faculdade de Tecnologia Bandeirantes 9

Criação da lista vazia 1 public class Lista { 2 private Nodo prim; 3 public void crialista(){ 4 prim = null; 5 } 6 } Tópicos Principais Criação da lista vazia Faculdade de Tecnologia Bandeirantes 10

Listas encadeadas de inteiros: inserção Aloca memória para armazenar o elemento Encadeia o elemento na lista existente Tópicos Principais Listas encadeadas de inteiros: inserção Faculdade de Tecnologia Bandeirantes 11

Listas encadeadas de inteiros: inserção 1 /* 2 * insercao no inicio 3 */ 4 public void add(int i){ 5 Nodo novo = new Nodo(); 6 novo.setinfo(i); 7 novo.setprox(prim); 8 prim = novo; 9 } Tópicos Principais Listas encadeadas de inteiros: inserção Faculdade de Tecnologia Bandeirantes 12

Exemplo de utilização 1 public Main(){ 2 Lista lista = new Lista(); 3 lista.crialista(); 4 lista.add(45); 5 lista.add(60); 6 lista.add(1); 7 } Tópicos Principais Exemplo de utilização Faculdade de Tecnologia Bandeirantes 13

Função que percorre os elementos da lista 1 public void print(){ 2 for(nodo n = prim; n!= null; n = n.getprox()){ 3 System.out.println(n.getInfo()); 4 } 5 } Tópicos Principais Função que percorre os elementos da lista Faculdade de Tecnologia Bandeirantes 14

Exemplo de utilização 1 public Main(){ 2 Lista lista = new Lista(); 3 lista.crialista(); 4 System.out.println("Imprimindo valores"); 5 lista.print(); 6 lista.add(45); 7 lista.add(60); 8 lista.add(1); 9 System.out.println("Imprimindo valores"); 10 lista.print(); 11 } Tópicos Principais Exemplo de utilização Faculdade de Tecnologia Bandeirantes 15

Função que verifica se a lista está vazia 1 public boolean isempty(){ 2 if(prim == null) 3 return true; 4 else 5 return false; 6 } Tópicos Principais Função que verifica se a lista está vazia Faculdade de Tecnologia Bandeirantes 16

Função de busca Recebe a informação referente ao elemento a pesquisar Retornar o objeto da lista que representa o elemento ou null, caso o elemento não seja encontrado na lista. Tópicos Principais Função de busca Faculdade de Tecnologia Bandeirantes 17

1 /* 2 * busca por um elemento na lista 3 */ 4 public Nodo search(int i){ 5 for(nodo n = prim; n!= null; n = n.getprox()){ 6 if(n.getinfo()==i){ 7 return n; 8 } 9 } 10 return null; /* nao achou o elemento*/ 11 } Tópicos Principais Função de busca Faculdade de Tecnologia Bandeirantes 18

Exemplo de utilização da função de busca 1 Nodo temp; 2 if((temp = lista.search(60))!= null) 3 System.out.println("Achou "+temp.getinfo()); 4 else 5 System.out.println("Nao achou o elemento"); Tópicos Principais Exemplo de utilização da função de busca Faculdade de Tecnologia Bandeirantes 19

Função que retira um elemento da lista Recebe como entrada o valor do elemento a retirar. Atualiza o valor do ponteiro para a lista (prim) se o elemento removido for o primeiro. Tópicos Principais Função que retira um elemento da lista Faculdade de Tecnologia Bandeirantes 20

caso contrário, remove apenas o elemento da lista. Tópicos Principais Função que retira um elemento da lista Faculdade de Tecnologia Bandeirantes 21

1 public void remove(int i){ 2 /*objeto para o elemento anterior*/ 3 Nodo anterior = null; 4 /*objeto para percorrer a lista*/ 5 Nodo p = prim; 6 7 /*procura elemento na lista, guardando anterior*/ 8 while(p!= null && p.getinfo()!= i){ 9 anterior = p; 10 p = p.getprox(); 11 } 12 13 /*verifica se achou elemento*/ 14 if(p == null){ 15 /*nao achou: mantem prim da forma como estah*/ 16 return; 17 } 18 19 /*retira elemento*/ 20 if(anterior == null){ 21 /*retira elemento do inicio*/ 22 prim = p.getprox(); 23 }else{ 24 /*retira elemento do meio da lista*/ 25 anterior.setprox(p.getprox()); 26 } 27 } Tópicos Principais Função que retira um elemento da lista Faculdade de Tecnologia Bandeirantes 22

Função para liberar a lista 1 public void free(){ 2 while (prim!= null){ 3 Nodo temp = prim.getprox(); 4 prim = null; 5 prim = temp; 6 } 7 } Em Java, quando um objeto não é mais utilizado, a JVM é responsável por desalocar a memória que não é mais utilizada. No entanto, em outras linguagens de programação o programador deve explicitamente liberar a memória consumida pela variável desnecessária. Tópicos Principais Função para liberar a lista Faculdade de Tecnologia Bandeirantes 23

Manutenção da lista ordenada Função de inserção percorre os elementos da lista até encontrar a posição correta para a inserção do novo. Tópicos Principais Manutenção da lista ordenada Faculdade de Tecnologia Bandeirantes 24

1 public void addordenado(int i){ 2 Nodo novo; 3 /*objeto para o elemento anterior*/ 4 Nodo anterior = null; 5 /*objeto para percorrer a lista*/ 6 Nodo p = prim; 7 8 /*procura elemento na lista, guardando anterior*/ 9 while(p!= null && p.getinfo() < i){ 10 anterior = p; 11 p = p.getprox(); 12 } 13 14 /*cria novo elemento*/ 15 novo = new Nodo(); 16 novo.setinfo(i); 17 18 /*encadeia o elemento*/ 19 if(anterior == null){ /*inseri o elemento no inicio*/ 20 novo.setprox(prim); 21 prim = novo; 22 }else{ /*inseri elemento no meio da lista*/ 23 novo.setprox(anterior.getprox()); 24 anterior.setprox(novo); 25 } 26 } Tópicos Principais Manutenção da lista ordenada Faculdade de Tecnologia Bandeirantes 25

Definição recursiva de lista Uma lista é: uma lista vazia, ou; um elemento seguido de uma (sub-)lista. Tópicos Principais Definição recursiva de lista Faculdade de Tecnologia Bandeirantes 26

Exemplo: função recursiva para imprimir uma lista se a lista for vazia, não imprima nada caso contrário, imprima a informação associada ao primeiro nó, dada por prim.getinf o() imprima a sub-lista, dada por prim.getp rox(), chamando recursivamente a função. Tópicos Principais Exemplo: função recursiva para imprimir uma lista Faculdade de Tecnologia Bandeirantes 27

Função imprime recursiva 1 public void printrecursivo(nodo n){ 2 if(!isempty(n)){ 3 /*imprime o primeiro elemento*/ 4 System.out.println(n.getInfo()); 5 /*imprime a sub-lista*/ 6 printrecursivo(n.getprox()); 7 } 8 } Tópicos Principais Função imprime recursiva Faculdade de Tecnologia Bandeirantes 28

Função imprime recursiva invertida 1 public void printrecursivoinvertido(nodo n){ 2 if(!isempty(n)){ 3 /*imprime a sub-lista*/ 4 printrecursivoinvertido(n.getprox()); 5 /*imprime o elemento*/ 6 System.out.println(n.getInfo()); 7 } 8 } Tópicos Principais Função imprime recursiva invertida Faculdade de Tecnologia Bandeirantes 29

Exemplo: função para retirar um elemento da lista retire o elemento, se ele for o primeiro da lista (ou da sub-lista) caso contrário, chame a função recursivamente para retirar o elemento da sub-lista Tópicos Principais Exemplo: função para retirar um elemento da lista Faculdade de Tecnologia Bandeirantes 30

Função retira elemento recursiva 1 public Nodo removerecursivo(nodo n, int v){ 2 if(!this.isempty(n)){ 3 /*verifica se o elemento a 4 *ser retirado e o primeiro*/ 5 if(n.getinfo()==v){ n = n.getprox(); 6 }else{ 7 /*retira da sub-lista*/ 8 n.setprox(removerecursivo(n.getprox(),v)); 9 } 10 } 11 return n; 12 } Tópicos Principais Função retira elemento recursiva Faculdade de Tecnologia Bandeirantes 31

Igualdade de listas boolean listasiguais(nodo l1, Nodo l2) Implementação não recursiva: percorre as duas listas usando dois ponteiros auxiliares: se duas informações forem diferentes então as listas são diferentes. ao terminar uma das listas ou as duas: se os dois ponteiros auxiliares são NULL então as duas listas tem o mesmo número de elementos e são iguais. Tópicos Principais Igualdade de listas Faculdade de Tecnologia Bandeirantes 32

Listas iguais: não recursiva 1 public boolean listasiguais(nodo l1, Nodo l2){ 2 Nodo t1; /*objeto para percorrer l1*/ 3 Nodo t2; /*objeto para percorrer l2*/ 4 for(t1=l1, t2=l2; 5 t1!= null && t2!= null; 6 t1=t1.getprox(), t2=t2.getprox()){ 7 8 if(t1.getinfo()!= t2.getinfo()) 9 return false; 10 } 11 return true; 12 } Tópicos Principais Listas iguais: não recursiva Faculdade de Tecnologia Bandeirantes 33

Igualdade de listas boolean listasiguais(nodo l1, Nodo l2) Implementação recursiva: se as duas listas dadas são vazias então são iguais se não forem ambas vazias, mas uma delas é vazia, então são diferentes se ambas não forem vazias, teste: se informações associadas aos primeiros nós são iguais e se as sub-listas são iguais. Tópicos Principais Igualdade de listas Faculdade de Tecnologia Bandeirantes 34

Listas iguais: recursiva 1 public boolean listasiguaisrec(nodo l1, Nodo l2){ 2 if(l1 == null && l2 == null){ 3 return true; 4 }else if(l1 == null l2 == null){ 5 return false; 6 }else 7 return 8 ((l1.getinfo()==l2.getinfo()) 9 && 10 listasiguaisrec(l1.getprox(),l2.getprox())); 11 } Tópicos Principais Listas iguais: recursiva Faculdade de Tecnologia Bandeirantes 35

Listas de tipos estruturados Lista de tipo estruturado: a informação associada a cada nó de uma lista encadeada pode ser mais complexa, sem alterar o encadeamento dos elementos; as funções apresentadas para manipular listas de inteiros podem ser adaptadas para tratar listas de outros tipos. Tópicos Principais Listas de tipos estruturados Faculdade de Tecnologia Bandeirantes 36

o campo da informação pode ser representado por um objeto para uma estrutura, em lugar da estrutura em si. independente da informação armazenada na lista, a estrutura do nó é sempre composta por: um objeto para a informação e um objeto para o próximo nó da lista. Tópicos Principais Listas de tipos estruturados Faculdade de Tecnologia Bandeirantes 37

Listas de tipos estruturados 1 public class Nodo{ 2 private Aluno al; 3 private Nodo prox; 4 } 5 6 class Aluno{ 7 private String nome; 8 private String matricula; 9 private float n1; 10 private float n2; 11 private float n3; 12 } Tópicos Principais Listas de tipos estruturados Faculdade de Tecnologia Bandeirantes 38

Listas heterogêneas 1 public class Nodo{ 2 private FormasGeometricas fg; 3 private Nodo prox; 4 } 5 6 public class abstract FormasGeometricas{ 7 private float b; 8 private float h; 9 public abstract float calculaarea(); 10 } 11 12 public class Retangulo extends FormasGeometricas{ 13 public float calculaarea(){ 14 return b*h; 15 } 16 } 17 18 public class Triangulo extends FormasGeometricas{ 19 public float calculaarea(){ 20 return b*h/2; 21 } 22 } Tópicos Principais Listas heterogêneas Faculdade de Tecnologia Bandeirantes 39

Tópicos Complementares 40

Tópicos Complementares Listas Circulares Listas Duplamente Encadeadas Tópicos Complementares Tópicos Complementares Faculdade de Tecnologia Bandeirantes 41

Material de consulta Capítulo 10 do livro: Introdução a Estruturas de Dados do Waldemar Celes, Renato Cerqueira e José Lucas Rangel. Tópicos Complementares Material de consulta Faculdade de Tecnologia Bandeirantes 42

Material de referência Capítulo 10 do livro: Introdução a Estruturas de Dados do Waldemar Celes, Renato Cerqueira e José Lucas Rangel. Imagens retiradas do site da disciplina de Programação II da PUC do Rio de Janeiro. http://www.inf.puc-rio.br/ inf1007/. Tópicos Complementares Material de referência Faculdade de Tecnologia Bandeirantes 43