Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

O TAD fila O TAD fila armazena objetos arbitrários
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
TAD Deque ATAI.
Chain of Responsibility
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Listas Ligadas – Conceitos Avançados
Walfredo Cirne walfredo.dsc.ufpb.br
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Robson Godoi / Sandra Siebra
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
CRIANDO OBJETOS EM JAVA
ALGORITMOS E ESTRUTURAS DE DADOS
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 02a Roberto Ferrari Mauricio Falvo.
Departamento de Estatística e Informática
LISTAS DUPLAMENTE ENCADEADAS
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 02b Roberto Ferrari Mauricio Falvo.
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 04b Roberto Ferrari Mauricio Falvo.
Árvores Binárias de Pesquisa
Lista Encadeada Circular Lista Duplamente Encadeada
Listas lineares Denise Guliato Faculdade de Computação – UFU
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 03a
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Orientação a Objetos e Java Graduação em Ciência da Computação
Pilhas Profa. Nádia Félix.
Lista encadeada Representar um grupo de dados.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Listas Simplesmente Encadeadas
Aula 04 – 22/03 Listas Duplamente Encadeada – Listas Encadeada Circular – Lista Duplamente Encadeada Circular.
Tipos Especiais de Listas
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Curso de Linguagem Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados I Segundo Período de 2008 Gabarito da Primeira Prova.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
SableCC Shirley Silva e Jobson Jeronimo Centro de Informática – CIn Universidade Federal de Pernambuco – UFPE
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Programação e Laboratório II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Modificadores Programação II.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo - Transparências baseadas nos originais da profa. Renata Galante.
1 TAD Fila com Prioridade -FCP ATAI. 2 TAD Fila com Prioridade (Priority Queue) TAD Fila com Prioridade armazena uma colecção de elementos com prioridade.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Estrutura de Dados Aula 3 - Listas
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Transcrição da apresentação:

Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos

Programação II 2 Listas Duplamente Encadeadas Cada nó possui dois ponteiros: Vantagem: simplifica certas operações e permite percorrer a lista nos dois sentidos. Desvantagem: gasta mais espaço do que a simplesmente encadeada (mais um ponteiro em cada nó) e pode tornar mais complexas certas operações. previous element next nónó

Programação II 3 Lista encadeada com referência ao ultimo elemento da lista Apontador para o primeiro nó da lista head Apontador para o último nó da lista tail null final de lista null início de lista

Programação II 4 classe DNode public class DNode { private E element; private DNode next; private DNode previous; public DNode(E element) { this (element, null, null); } public DNode(E element, DNode next, DNode previous) { super(); this.element = element; this.next = next; this.previous = previous; } public E getElement() { return element; } public void setElement(E element) { this.element = element; } public DNode getNext() { return next; } public void setNext(DNode next) { this.next = next; } public DNode getPrevious() { return previous; } public void setPrevious(DNode previous) { this.previous = previous; } } // end of class previous element next nónó

Programação II 5 class DLinkedList (1) public class DLinkedList { protected DNode head; //nodo cabeça da lista protected DNode tail; //nodo cauda da lista protected long size; //número de nodos da lista public DLinkedList() { size = 0; head = tail = null; } public boolean isEmpty() { return head == null; } head tail

Programação II 6 class DLinkedList (2) public E getFirst() throws UnderflowException { if (isEmpty()) throw new UnderflowException(); return head.getElement(); } public E getLast() throws UnderflowException { if (isEmpty()) throw new UnderflowException(); return tail.getElement(); } head b tail cde

Programação II class DLinkedList (3) public void addFirst(E insertItem) { DNode n = new DNode (insertItem); if (isEmpty()) { head = tail = n; } else { head.setPrevious(n); n.setNext(head); head = n; } size++; } head b tail cdea n

Programação II class DLinkedList (3) public void addFirst(E insertItem) { DNode n = new DNode (insertItem); } head b tail cde a n

Programação II class DLinkedList (3) public void addFirst(E insertItem) { DNode n = new DNode (insertItem); if (isEmpty()) { head = tail = n; } a n head tail

Programação II class DLinkedList (3) public void addFirst(E insertItem) { DNode n = new DNode (insertItem); if (isEmpty()) { head = tail = n; } else { head.setPrevious(n); n.setNext(head); head = n; } size++; } head b tail cdea n

Programação II class DLinkedList (4) public void addLast(E insertItem) { DNode n = new DNode (insertItem); if (isEmpty()) { head = tail = n; } else { tail.setNext(n); n.setPrevious(tail); tail = n; } size++; } head b tail cdex n

null Programação II 12 class DLinkedList (5) head tail e removedItem e public E removeFirst() throws UnderflowException { if (isEmpty()) { throw new UnderflowException(); } E removedItem = head.getElement(); if (head == tail) { head = tail = null; } return removedItem; }

Programação II 13 class DLinkedList (5) public E removeFirst() throws UnderflowException { if (isEmpty()) { throw new UnderflowException(); } E removedItem = head.getElement(); if (head == tail) { head = tail = null; } else { head = head.getNext(); head.setPrevious(null); } size--; return removedItem; } head b tail cde

Programação II 14 class DLinkedList (6) public E removeLast() throws UnderflowException { if (isEmpty()) { throw new UnderflowException(); } E removedItem = tail.getElement(); if (head == tail) { head = tail = null; } else { DNode penultimo = tail.getPrevious(); tail = penultimo; tail.setNext(null); } size--; return removedItem; } head b tail cde penultimo

Programação II 15 class DLinkedList (7) public void print() { DNode current = head; while (current != null) { System.out.println(current.getElement()); current = current.getNext(); } head 2 tail 345 current =null

Programação II 16 Testando a lista public static void main(String args[]) { DLinkedList list = new DLinkedList (); list.addLast(2); list.addLast(4); list.addLast(6); list.addLast(1); list.addLast(8); list.addLast(9); list.print(); try { list.removeFirst(); } catch (UnderflowException e) { e.printStackTrace(); } list.print(); }

Exercício 1 Na classe DLinkedList (implementação de lista duplamente encadeada), implementar um método com a seguinte assinatura: –“ private Node find(E key) ”. Este método deve buscar na lista o nó de chave key e retorná-lo. Programação II 17

Exercício 1 public DNode find(E key) { DNode current = head; while (current != null) { if (current.getElement().equals(key)) { return current; } current = current.getNext(); } return null; } Programação II 18

Exercício 2 Na classe DLinkedList (implementação de lista duplamente encadeada), implementar um método com a seguinte assinatura: –“ public boolean addBefore (E el, E key) ”. Este método deve inserir na lista um nó com chave el na posição anterior ao nó que contenha a chave key. Programação II 19

Exercício 2 public boolean addBefore(E el, E chave) { DNode current = find(chave); if (current == null) { return false; } else if (current == head) { addFirst(el); return true; } else { DNode n2 = new DNode (el); DNode before = current.getPrevious(); before.setNext(n2); n2.setPrevious(before); n2.setNext(current); current.setPrevious(n2); return true; } Programação II 20