Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Slides:



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

Soluções Iterativas com Laços
Programação em Java Prof. Maurício Braga
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Utilitários Marco Antonio. Enum Como o nome sugere, é uma enumeração de opções para uma determinada situação A principal vantagem é limitar as opções.
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
TAD Deque ATAI.
Chain of Responsibility
Padrão de Projeto Interpreter
Projeto de Sistemas de Software Trabalho de Padrões de Projeto
Programação Básica em Java
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.
Wagner Santos C. de Jesus
Slides: Prof. João Fabro UTFPR - Curitiba
Listas Encadeadas.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
Universidade do Vale do Rio dos Sinos - São Leopoldo -
LISTAS DUPLAMENTE ENCADEADAS
Listas lineares Denise Guliato Faculdade de Computação – UFU
Orientação a Objetos e Java Graduação em Ciência da Computação
Tipos Especiais de Listas
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
Tipos Especiais de Listas
Wagner Santos C. de Jesus
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Tratamento de Exceções
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
Á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)
Estrutura de Controle em JAVA
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
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.
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
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 -
Coleções em Java - Parte 2
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.
Socket em Java.
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 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 - Transparências baseadas nos originais da profa. Patrícia Jaques.
Programação e Laboratório 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 -
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.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Listas Duplamente Encadeadas Profs Prog2 e Lab2 Unisinos.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
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:

Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -

Programação II – Prof. Mateus Raeder 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. previousNode data nextNode nónó

Programação II – Prof. Mateus Raeder Lista encadeada com referência ao ultimo elemento da lista Apontador para o primeiro nó da lista firstNode Apontador para o último nó da lista lastNode null final de lista null início de lista

Programação II – Prof. Mateus Raeder Classe Node public class Node { private String data; private Node nextNode; private Node previousNode; public Node( String element ) { this( element, null ); } public Node( String element, Node node ){ data = element; nextNode = node; } public String getData() { return data; } public void setData (String element) { data = element; }

Programação II – Prof. Mateus Raeder Classe Node public Node getNext() { return nextNode; } public void setNext(Node n) { nextNode = n; } public Node getPrevious() { return previousNode; } public void setPrevious(Node n) { previousNode = n; }

Programação II – Prof. Mateus Raeder Class List (1/6) public class List { private Node firstNode ; private Node lastNode ; private String name ; public List() { this("list"); } public List (String listName) { name = listName; firstNode = lastNode = null; } public String getFirst () throws UnderflowException { if (isEmpty()) throw new UnderflowException(); return firstNode.getData(); } public String getLast () throws UnderflowException { if (isEmpty()) throw new UnderflowException(); return lastNode.getData(); } public boolean isEmpty () { return firstNode == null; }

Programação II – Prof. Mateus Raeder Class List (2/6) public void insertAtFront (String insertItem) { Node n = new Node(insertItem); if (isEmpty()) { firstNode = lastNode = n; } else { firstNode.setPrevious(n); n.setNext(firstNode); firstNode = n; } firstNode b lastNode cdea n

Programação II – Prof. Mateus Raeder Class List (3/6) public void insertAtBack (String insertItem) { Node n = new Node(insertItem); if (isEmpty()) { firstNode = lastNode = n; } else { lastNode.setNext(n); n.setPrevious(lastNode); lastNode = n; } firstNode b lastNode cdex n

Programação II – Prof. Mateus Raeder Class List (4/6) public String removeFromFront () throws UnderflowException { if (isEmpty()) { throw new UnderflowException(); } String removedItem = firstNode.getData(); if (firstNode == lastNode) { firstNode = lastNode = null; } else { firstNode = firstNode.getNext(); firstNode.setPrevious(null); } return removedItem; } firstNode b lastNode cde

Programação II – Prof. Mateus Raeder Class List (5/6) public String removeFromBack () throws UnderflowException { if (isEmpty()) { throw new UnderflowException(); } String removedItem = lastNode.getData(); if (firstNode == lastNode) { firstNode = lastNode = null; } else { Node penultimo = lastNode.getPrevious(); lastNode = penultimo; lastNode.setNext(null); } return removedItem; } firstNode b lastNode cde penultimo

Programação II – Prof. Mateus Raeder Class List (6/6) public void print () { if (isEmpty()) { System.out.println("Empty " + name); } else { System.out.print("The " + name + " is: "); Node current = firstNode; while (current != null) { System.out.print(current.getData().toString() + " "); current = current.getNext(); } System.out.println("\n"); } firstNode 2 lastNode 345 current =null

Programação II – Prof. Mateus Raeder Testando a lista public class ListTest { public static void main( String args[] ) { List list = new List( ); list.insertAtBack("1"); list.insertAtBack("2"); list.insertAtBack("3"); list.insertAtBack("4"); list.print(); try { Object removedEl = list.removeFromFront(); System.out.println( removedEl.toString() + " removed" ); removedEl = list.removeFromFront(); System.out.println( removedEl.toString() + " removed" ); removedEl = list.removeFromBack(); System.out.println( removedEl.toString() + " removed" ); removedEl = list.removeFromBack(); System.out.println( removedEl.toString() + " removed" ); } catch ( UnderflowException e ) { e.printStackTrace(); }

Programação II – Prof. Mateus Raeder Exercício 1) Na classe List (implementação de lista duplamente encadeada), implementar um método com a seguinte assinatura: –“public boolean insertBefore (String val1, String val2)”. –Este método deve inserir na lista um nó com dado val2 na posição anterior ao nó que contenha o dado val1. 2) Implemente na classe List um método que insere um nó na k-ésima posição (firstNode é a posição 0) 3) Implemente um método que remova um nó que contém determinada informação (String o, por ex.)

Programação II – Prof. Mateus Raeder Resposta 1 public boolean insertBefore(String obj1, String obj2){ Node current = firstNode; if(firstNode.getData() == obj1){ insertAtFront(obj2); return true; } while (current != null){ if(current.getData() == obj1){ Node novo = new Node(obj2, current); novo.setPrevious(current.getPrevious()); current.setPrevious(novo); novo.getPrevious().setNext(novo); return true; } current = current.getNext(); } return false; }

Programação II – Prof. Mateus Raeder Resposta 2 public boolean insereKesimo(String obj1, int pos){ Node current = firstNode; int posAtual = 0; if(pos >= 0){ while (current != null){ if(posAtual == pos){ Node novo = new Node(obj1, current); novo.setPrevious(current.getPrevious()); current.setPrevious(novo); novo.getPrevious().setNext(novo); return true; } posAtual++; current = current.getNext(); } return false; }

Programação II – Prof. Mateus Raeder Resposta 3 public boolean removeObj(String obj1){ Node current = firstNode; while (current != null){ if(current.getData() == obj1){ current.getPrevious().setNext(current.getNext()); current.getNext().setPrevious(current.getPrevious()); return true; } current = current.getNext(); } return false; }