ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

Documentos relacionados
Listas Lineares Ordenadas

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

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Lista Encadeada (Linked List)

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Estruturas de Dados Encadeadas

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Lista Ligada. Nó de Lista Ligada

1. Listas sequenciais versus listas ligadas. Lista sequencial

Tipos Abstractos de Dados (TADs) e Java

SCC 202 Algoritmos e Estruturas de Dados I. Listas Lineares Encadeadas Alocação dinâmica

Capítulo VIII. Tipo Abstracto de Dados Dicionário. Acesso por Chave

Agenda. Ideia. Buscar um item em um array. Função hash. Função hash. Hash Table. Introdução Definição Hash Table. Métodos de resolução de conflitos

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Árvores Binárias de Busca (ABB) 18/11

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8.

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Estruturas de Dados I

DAINF - Departamento de Informática

Fila. Algoritmos e Estruturas de Dados I

Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!

Aula 11 Pilha Dinâmica. prof Leticia Winkler

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

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Pilhas. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)

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

Pilha e Fila. Pilha em C. Definir o registro que representará cada elemento da pilha.

4. Listas, Pilhas, e Filas

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

Tipos, Literais, Operadores

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Paradigmas de Programação

Coleções em Java. Prof. Gustavo Willam Pereira ENG10082 Programação II. Créditos: Prof. Clayton Vieira Fraga Filho

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Lista com descritor (continuação)

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Splaying Tree (Árvore espalhada) Estrutura de Dados II Jairo Francisco de Souza

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Algoritmos e Programação II. Coleções. Coleções. Baseado no material do Prof. Julio

Tipos de Dados Abstratos

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

Algoritmos e Estruturas de Dados II IEC013

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

Revisão: Tipo Abstrato de Dados Recursividade

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Módulo 10 Listas Encadeadas

16/11/2015 Lista Tipo de dado Lista - Implementação Lista - Implementação Lista - Implementação 3

Exercício de Estrutura de dados. Java Fila

4 Conceito de Herança

Filas Exemplo de Aplicação

Projeto de Linguagem. Linguagens de Programação

Pilhas Filas e Listas

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Linguagem C: Listas Encadeadas

Revisão de TDA, Pilhas e Filas

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores Binárias de Busca

ÁRVORE BINÁRIA DE BUSCA TDA-ABB

Conceitos. Pilhas e Filas. Conceitos e Implementação em linguagem C. Maria Adriana Vidigal de Lima. Março

EAD Árvore - representação usando listas ligadas

Árvores binárias de busca

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

Pilhas. Prof. Túlio Toffolo BCC202 Aula 11 Algoritmos e Estruturas de Dados I

Módulo 4. Listas Encadeadas. Algoritmos e Estruturas de Dados II C++ (Rone Ilídio)

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Árvore Binária de Busca

Transcrição:

ESTRUTURAS DE DADOS E ALGORITMOS 1 LISTA LIGADA Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande

LISTA LIGADA (LINKED LIST) É uma estrutura de dados em que objetos sao arranjados em ordem linear. Ordem estabelecida por ligacao (links) entre elementos da lista. Cada nó da lista armazena um elemento e uma referencia para o próximo nó da lista. 5 6 8 null 2

LISTA LIGADA (LINKED LIST) Características Um dos tipos abstratos de dados fundamentais Seqüência de tamanho arbitrário e dinâmico de elementos de algum tipo base Utiliza o espaço necessário (alocação dinâmica) A ordem é determinada por um ponteiro e não pelo índice como no array Acesso sequencial 3

LISTA Operações Inserir Remover Pesquisar Tamanho Vazio 4

LISTA Operações Inserir Remover Pesquisar Tamanho Vazio Como definir em Java tal estrutura? 5

LISTA (IMPLEMENTACAO) public interface LinkedList<T> { public boolean isempty(); public int size(); public T search(t element); public void insert(t element); public void remove(t element); public T[] toarray(); 6

QUESTÕES DE IMPLEMENTAÇÃO Implementacao estática implementada com arrays Implementacao dinâmica através de duas abordagens: Estrutura recursiva com métodos iterativos Cada elemento (nó) da lista contém um dado armazenado e um apontador para o próximo elemento da lista Estrutura recursiva com métodos recursivos Cada elemento (nó) da lista contém um dado armazenado e um apontador para o próximo elemento da lista data next 7

QUESTÕES DE IMPLEMENTAÇÃO Lista vazia Representada por um nó especial () sem dado Pode também ser representado por null (não recomendado) Nós sentinela Representam a lista vazia e são acrescentados nas extremidades das listas Simplificam e aceleram alguns algoritmos sobre lista e dão garantia de que uma lista sempre contém algum nó (mesmo que seja vazio) Nó sentilena null null 8

IMPLEMENTAÇÃO Exemplo: lista de inteiros não negativos null null -1 5 2-1 Lista vazia= (caso base) Lista não vazia (caso indutivo) Como implementar em Java? 9

LISTA (IMPLEMENTACAO) data next public class SingleLinkedListNode<T> { protected T data; protected SingleLinkedListNode<T> next; public SingleLinkedListNode () { public SingleLinkedListNode(T data,node<t> next){ this.data = data; this.next = next; next public boolean is(){ data return (this.data == null); 10

LISTA (IMPLEMENTACAO) public class SingleLinkedListImpl<T> implements LinkedList<T>{ protected SingleLinkedListListNode<T> ; public SingleLinkedListImpl() { = new SingleLinkedListNode<T>();... 11

LISTA (ISEMPTY) Apenas a lista vazia deve retornar true. isempty(){ if == return true else return false 12

LISTA (INSERIR) Listas não ordenadas Insercoes no início ou no fim (default) Listas ordenadas Insercoes na posição correta (preservar ordem) inicio 6 inserir(6) fim 6 ordenado 6 13

LISTA (INSERIR) Listas não ordenadas Insercoes no início ou no fim (default) Listas ordenadas Insercoes na posição correta (preservar ordem) inicio 3 6 inserir(3) 6 fim 6 3 ordenado 3 6 14

LISTA (INSERIR) Listas não ordenadas Insercoes no início ou no fim (default) Listas ordenadas Insercoes na posição correta (preservar ordem) inserir(5) inicio 5 3 6 3 6 fim 3 6 5 ordenado 3 5 6 15

LISTA (INSERIR) Adotar listas não ordenadas e inserção ao final list-insert(item){ auxhead = if( = ){ newhead = new SingleLinkedListNode(item) newhead.next= = newhead else{ while(auxhead.next!= ){ auxhead = auxhead.next newnode = new SingleLinkedListNode(item) newnode.next = auxhead.next auxhead.next = newnode Qual o tempo de execução? 16

LISTA (PROCURAR) A procura é sequencial e se dá pelo valor armazenado procurar 5 null 6 8 5 6 8 5 6 8 5 17

LISTA (PROCURAR) Qual o tempo de execução? 18

LISTA (REMOVER) As remocoes se dão pelo valor armazenado remover 8 6 8 5 6 8 5 6 8 5 previous aux Como seria a remoção na lista? 19

LISTA (REMOVER) As remocoes se dão pelo valor armazenado list-remove(item){ if.data == item Qual o tempo de execução? =.next else{ aux = while aux!= and aux.data!= item { previous = aux aux = aux.next if aux!= { previous.next = aux.next 20

LISTA (TAMANHO) Como calcular o tamanho de uma lista? tamanho 0 tamanho 6 8 5 6 8 5 6 8 5 3 Como seria o algoritmo do tamanho? 21

LISTA (TAMANHO) list-size(){ size = 0 aux = while aux!= { size = size + 1 aux = aux.next return size Qual o tempo de execução? 22

LISTA (TOARRAY) Deve retornar um array contendo os elementos da lista na ordem do para o final. T[] list-toarray(){ T[] result = new T[] aux = int count = 0 while aux!= { result[count] = aux.data aux = aux.next count++ return result 23

EXERCÍCIO Implemente um método que encontre o maior elemento de uma lista ligada. Implemente um método que encontre o menor elemento de uma lista ligada. 24

25 LISTA DUPLAMENTE LIGADA

LISTA DUPLAMENTE LIGADA Cada nó tem referências para os nós sucessor e predecessor Listas duplamente encadeadas têm a vantagem de poderem ser percorridas em ambas as direções null -1 null null -1...... -1 null Isto permite reduzir para a metade o tempo máximo para acessar um elemento com base no seu índice Head e last ficam acessíveis na lista dupla 26

LISTA (IMPLEMENTACAO) Como seria a implementação de uma lista duplamente ligada? A estrutura do nó muda? A estrutura da lista em si muda? next previous next data data 27

LISTA (IMPLEMENTACAO) Como seria a implementação de uma lista duplamente ligada? public class DoubleLinkedListNode<T> extends SingleLinkedListNode<T> { protected DoubleLinkedListNode<T> previous; public DoubleLinkedListNode() { public DoubleLinkedListNode(T data, DoubleLinkedListNode<T> next, DoubleLinkedListNode<T> previous) { super(data, next); this.previous = previous; previous data next 28

LISTA (IMPLEMENTACAO) Como seria a implementação de uma lista duplamente ligada? public interface DoubleLinkedList<T> { public boolean isempty(); public int size(); public T search(t element); public void insert(t element); public void remove(t element); public T[] toarray(); public void insertfirst(t element); public void removefirst(); public void removelast(); 29

LISTA (IMPLEMENTACAO) Como seria a implementação de uma lista duplamente ligada? public interface DoubleLinkedList<T> { public boolean isempty(); public int size(); public T search(t element); public void insert(t element); public void remove(t element); public T[] toarray(); public void insertfirst(t element); public void removefirst(); public void removelast(); Esses métodos já existem em algum lugar? 30

LISTA (IMPLEMENTACAO) Como seria a implementação de uma lista duplamente ligada? public interface DoubleLinkedList<T> extends LinkedList<T> { public void insertfirst(t element); public void removefirst(); public void removelast(); 31

LISTA (IMPLEMENTACAO) public class DoubleLinkedListImpl<T> extends SingleLinkedListImpl<T> implements DoubleLinkedList<T> { DoubleLinkedListNode<T> last; last public DoubleLinkedListImpl() { = new DoubleLinkedListNode(); last = ; Algum método herdado precisa ser sobrescrito? 32

LISTA (IMPLEMENTACAO) public class DoubleLinkedListImpl<T> extends SingleLinkedListImpl<T> implements DoubleLinkedList<T> { DoubleLinkedListNode<T> last; last public DoubleLinkedListImpl() { = new DoubleLinkedListNode(); last = ; Algum método herdado precisa ser sobrescrito? 33 search (por otimização),insert,remove

LISTA DUPLA(SEARCH) Pelos dois sentidos: e last last last search(6) 6 last search(x) 10 6 34

LISTA DUPLA(IMPLEMENTAÇÃO) //busca (com otimização) List-search(item){ auxhead = auxlast = last while(auxhead!= auxlast and auxhead.next!= auxlast and auxhead.data!= item and auxlast.data!= item){ auxhead = auxhead.next auxlast = auxlast.previous if auxhead.data == item return auxhead.data if auxlast.data == item return auxlast.data 35

LISTA DUPLA(INSERIR NO FINAL= DEFAULT) last last inserir(6) 6 last inserir(10) 6 10 36

LISTA DUPLA(INSERIR NO FINAL = DEFAULT) //insere no final e ajusta os links next e previous List-insert-last(item){ newlast = new DoubleLinkedListNode(item) newlast.previous = last newlast.next = last.next = newlast if last == { //para o caso da lista vazia = newlast last = newlast 37

LISTA DUPLA(INSERIR NO INÍCIO) last last inserir(6) 6 last inserir(10) 10 6 38

LISTA DUPLA(INSERIR NO INÍCIO) //insere no começo e ajusta os links next e previous List-insert(item){ newhead = new DoubleLinkedListNode(item) newhead.next = newhead.previous =.previous = newhead if == { //para o caso da lista vazia last = newhead = newhead List-insert-first(item){ List-insert(item) 39

LISTA DUPLA(REMOVER NO INICIO) last last remove-first() 6 remove-first() 6 last 10 last 40 10

LISTA DUPLA(REMOVER NO INICIO) //remover do inicio List-remove-first(){ if!= { =.next if == { last =.previous = 41

LISTA DUPLA(REMOVER NO FINAL) remove-last() last 6 last last remove-last() 6 10 last 42 6

LISTA DUPLA(REMOVER NO FINAL) //remover do final List-remove-last(){ if last!= { last = last.previous if last == { = last last.next = 43

LISTA DUPLA(REMOVER PELA CHAVE = DEFAULT) remover(6) last 6 last last remover(6) 6 10 last 10 44

LISTA DUPLA(REMOVER PELA CHAVE = DEFAULT) list-remove(item){ if.data == item remove-first() else{ aux = while aux!= and aux.data!= item { aux = aux.next if aux!= { aux.previous.next = aux.next aux.next.previous = aux.previous 45

REFERÊNCIAS Capítulo 11 46