Listas Encadeadas Circulares Listas Duplamente Encadeadas

Slides:



Advertisements
Apresentações semelhantes
TADs Vector, Lista e Sequência
Advertisements

Motivação para listas duplamente encadeadas e circulares
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Interação entre objetos
TAD Deque ATAI.
ADT – Arvore Binária de Pesquisa
Múltiplos Os múltiplos de um número inteiro obtêm-se multiplicando esse número por 0, 1, 2, 3, 4, 5, 6, ... Exemplos: M5= {0, 5, 10, 15, 20,
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
Java: Pacotes e Modificadores de Visibilidade
Percurso não recursivo e impressão em árvores binárias Drozdek.
Árvores.
Pilhas e Filas.
Classificação. 2 Métodos de Classificação Os métodos de classificação podem ser dos tipos: Classificação interna – quando toda a coleção de itens a classificar.
Estruturas Fundamentais
Listas Ordenadas e Listas Classificadas. 2 Sumário Fundamentos Listas Ordenadas Listas Classificadas.
Árvores.
Árvores de Busca. 2 Uma árvore que suporta eficientes operações de busca, inclusão e exclusão é chamada de árvore de busca. A árvore é usada para armazenar.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
Filas circulares.
DIAGRAMA DE ATIVIDADES
UML NO PROJETO DE COMPONENTES:
DIAGRAMA DE CASOS DE USO PERSPECTIVA CONCEITUAL
Listas Ligadas – Conceitos Avançados
Administração para Engenharia
1 Sabendo-se que os pratos das balanças estão em equilíbrio, você seria capaz de dizer: Quantos quadrados corresponde um círculo ? Dica Mais dicas Elaboração:
Auditoria de Segurança da Informação
Arquiteturas de 4, 3, 2, 1 e 0 endereços.
Mais sobre classes Baseada no Livro: Deitel&Deitel - C++ How To program Cap. 7 Prentice Hall 1994 SCE 213 Programação Orientada a Objetos, ICMC - USP 2.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.
Exemplo: ordenação de uma lista pelo Selection-Sort:
1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos.
ALOCAÇÃO DINÂMICA DE MEMÓRIA
TE 043 CIRCUITOS DE RÁDIO-FREQÜÊNCIA
Listas Encadeadas.
Fraction Action FRACÇÕES.
Programação Baseada em Objectos Desenho de TAD
Listas Encadeadas.
Classes e objetos Arrays e Sobrecarga
1 APLICAÇÃO DA VISUALIZAÇÃO CIENTÍFICA À OCEANOGRAFIA Representação da agitação marítima no porto de Leixões Disciplina de Visualização Científica Mestrado.
Como aplicar leis da lógica
Sincronização com Locks. Locks É um mecanismo de sincronização de processos/threads em que estas devem ser programadas de modo que seus efeitos sobre.
Cinemática Plana de um Corpo Rígido Cap. 16
MECÂNICA - DINÂMICA Cinemática de uma Partícula Cap Exercícios.
Árvores binárias de pesquisa com balanceamento
1 António Arnaut Duarte. 2 Sumário: primeiros passos;primeiros passos formatar fundo;formatar fundo configurar apresentação;configurar apresentação animação.
Caríssimos. A todos, meus cumprimentos
Salas de Matemática.
Genética Molecular e Humana
MINISTÉRIO DO PLANEJAMENTO Projeto de Lei Orçamentária 2010 Ministro Paulo Bernardo Silva Brasília, 31 de agosto de 2009.
Principais operações em Listas TPA Listas Simples Inserção no Final 1.void insereNofinalDaLista(Lista *l, Elemento e){ 2.Lista paux,p; 3. p.
Listas: Haskell x Prolog
Entendendo as definições de classe
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Grupo A – Azul Claro, Marrom, Laranja
Portugal: Convergência Real Para a União Europeia Abel Moreira Mateus Outubro 2000.
Os métodos equals() e hashCode()
CALENDÁRIO SEXY Ele & Ela. CALENDÁRIO SEXY Ele & Ela.
Java Generics Adeline de Sousa Silva.
Tipos Especiais de Listas
Diagramas de Venn e de Carroll Não se chamam propriamente ferramentas/instrumentos estatísticos mas ajudam a organizar de uma forma simples alguns tipos.
Análise da Arrecadação Agosto de Desempenho da Arrecadação das Receitas Federais Evolução Janeiro a Agosto – 2014/2013 (A preços de agosto/14 –
Análise da Arrecadação Setembro de Desempenho da Arrecadação das Receitas Federais Evolução Janeiro a Setembro – 2014/2013 (A preços de setembro/14.
Análise da Arrecadação Outubro de Desempenho da Arrecadação das Receitas Federais Evolução Janeiro a Outubro – 2014/2013 (A preços de outubro/14.
Rio Verde - Goiás - Brasil
Listas Simplesmente Encadeadas
Nome alunos 1 Título UC. Título – slide 2 Conteúdo Conteúdo 2.
POTENCIAÇÃO E RAIZ QUADRADA DE NÚMEROS RACIONAIS
GINÁSTICA LABORAL UM NOVO CAMINHO.
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Transcrição da apresentação:

Listas Encadeadas Circulares Listas Duplamente Encadeadas

Motivação para listas duplamente encadeadas e circulares

LISTAS CIRCULARES Um dos inconvenientes do emprego de listas encadeadas consiste no caso de, dado um ponteiro para um nó p de uma lista encadeada, não se ter acesso aos nós que precedem o nó p Este inconveniente pode ser contornado com o emprego de listas circulares Listas circulares são listas encadeadas nas quais o ponteiro do último nó deixa de ser aterrado para apontar o primeiro nó da lista

LISTAS CIRCULARES Uma lista circular não tem um primeiro nó nem último nó “naturais” Uma convenção útil é apontar o ponteiro externo (“tail” para a lista circular) para o último nó, sendo o conceito de último vindo de tempo de inclusão O ponteiro head torna-se permanentemente aterrado e o ponteiro tail aponta o último elemento da lista Outra alternativa consiste em usar apenas um ponteiro externo head

Listas circulares Ponteiros aterrados representam listas circulares vazias

Listas circulares – inclusão Inclusão de um nó com endereço apontado por tmp na frente e na retaguarda de uma lista circular apontada por tail A inclusão na retaguarda é uma inclusão na frente seguida de tail ← tmp

Listas circulares – inclusão na frente // frente será o sucessor de tail public void insertFront(Object item){ Element tmp = new Element (item, null); if (tail = null) tail = tmp; else { tmp.next = tail.next; tail.next = tmp; }

Listas circulares – inclusão no final // frente será o sucessor de tail // depois tail será tail.next public void insertRear(Object item){ Element tmp = new Element (item, null); if (tail = null) tail = tmp; else { tmp.next = tail.next; tail.next = tmp; } tail = tmp; // transformar primeiro em último

Listas circulares – exclusão (1) Exclusão do nó da frente de uma lista circular na qual tail aponta o último nó com a recuperação da informação desse nó em y

Listas circulares – exclusão (2) public void extractLast(Object item) { if (tail = null) throw new IllegalArgumentException ("item not found"); Element tmp = tail.next; item = tmp.datum; tail.next = tmp.next if (tail = tmp) tail = null; }

LISTAS DUPLAMENTE ENCADEADAS Alterando-se os nós de listas encadeadas de forma que cada nó passe a contar, além do registro de informação e do ponteiro para o sucessor, também um ponteiro para antecessor se obtém listas duplamente encadeadas

LISTAS DUPLAMENTE ENCADEADAS

LISTAS DUPLAMENTE ENCADEADAS Uma propriedade característica das listas duplamente encadeadas é expressa por: p.next.prev = p = p.prev.next EXEMPLO

LISTAS DUPLAMENTE ENCADEADAS Memória

LISTAS DUPLAMENTE ENCADEADAS – Inclusão (1) inclusão do nó apontado por q à direita do nó apontado por p

LISTAS DUPLAMENTE ENCADEADAS – Exclusão (1) exclusão do nó apontado por q

Listas Duplamente Encadeadas Implementação

Classe DoubleLinkedList public class DoubleLinkedList { protected Element head; // cabeça protected Element tail; // cauda public final class Element { // elemento do lista Object datum; // dado do elemento ou item Element next; // ponteiro para sucessor Element prev; // ponteiro para antecessor Element(Object datum, Element next, Element prev) { // construtor this.datum = datum; this.next = next; this.prev = prev; } public Object getDatum() // obter dado { return datum; } public Element getNext() // obter sucessor { return next; } public Element getPrev() // obter antecessor { return prev; } // ...

Métodos Construtor e purge public class DoubleLinkedList { protected Element head; protected Element tail; public DoubleLinkedList () // construir uma lista {} public void purge () // esvaziar uma lista head = null; tail = null; } // ...

Métodos getHead, getTail e isEmpty public class DoubleLinkedList { protected Element head; protected Element tail; public Element getHead () // cabeça da lista { return head; } public Element getTail () // cauda da lista { return tail; } public boolean isEmpty () //teste de lista vazia { return head == null; } // ... }

Métods getFirst e getLast public class DoubleLinkedList { protected Element head; protected Element tail; public Object getFirst() { // obter o primeiro elemento //da lista if(head == null) throw new ContainerEmptyException(); return head.datum; } public Object getLast() { // obter o último elemento //da lista if(tail == null) return tail.datum; // ...

Método prepend public class DoubleLinkedList { protected Element head; protected Element tail; // inluir o objeto item no início da lista corrente public void prepend(Object item) Element tmp = new Element(item, head, null); if(head == null) tail = tmp; head.prev = tmp; head = tmp; } // ...

Método append public class DoubleLinkedList { protected Element head; protected Element tail; // incluir o objeto item no final da lista corrente public void append (Object item) Element tmp = new Element (item, null, tail); if(head == null) head = tmp; else tail.next = tmp; tail = tmp; } // ...

Método assign public class DoubleLinkedList { protected Element head; protected Element tail; // a lista list será uma cópia da lista corrente public void assign(DoubleLinkedList list) { if(list != this) purge (); for(Element ptr = list.head; ptr != null; ptr = ptr.next) append (ptr.datum); } // ...

Método extract (1) public class DoubleLinkedList { protected Element head; protected Element tail; // Exclui objeto item public void extract(Object item) Element ptr = head; while(ptr != null && ptr.datum != item) ptr = ptr.next; } // encontrado ptr // se for válido excluir elemento

Método extract (2) if(ptr == null) throw new IllegalArgumentException("item not found"); if(ptr == head) // exclui head { ptr.next.prev = null; head = ptr.next; } else ptr.prev.next = ptr.next; ptr.next.prev = ptr.prev; if(ptr == tail) // exclui tail ptr.prev.next = null; tail = ptr.prev;

Método insertAfter // Inclui item depois do objeto corrente public void insertAfter(Object item) { Element tmp = new Element (item, next, this); if(tail == this){ this.next = tmp; tail = tmp; } else { next.prev = tmp;

Método insertBefore // Inclui item antes do objeto corrente public void insertBefore(Object item) { Element tmp = new Element(item, this, this.prev); if(this == head) { this.prev = tmp; head = tmp; } else { prev.next = tmp; // ...