A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Universidade do Vale do Rio dos Sinos - São Leopoldo -

Apresentações semelhantes


Apresentação em tema: "Universidade do Vale do Rio dos Sinos - São Leopoldo -"— Transcrição da apresentação:

1 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 -

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

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

4 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) { Programação II – Prof. Mateus Raeder 4

5 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

6 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 { return lastNode.getData(); public boolean isEmpty() { return firstNode == null; Programação II – Prof. Mateus Raeder

7 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 lastNode n b c d e a Programação II – Prof. Mateus Raeder

8 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 lastNode b c d e n x Programação II – Prof. Mateus Raeder

9 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 lastNode b c d e Programação II – Prof. Mateus Raeder

10 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 penultimo lastNode b c d e Programação II – Prof. Mateus Raeder

11 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 =null lastNode current 2 3 4 5 Programação II – Prof. Mateus Raeder

12 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(); removedEl = list.removeFromBack(); } catch ( UnderflowException e ) { e.printStackTrace(); } Programação II – Prof. Mateus Raeder

13 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


Carregar ppt "Universidade do Vale do Rio dos Sinos - São Leopoldo -"

Apresentações semelhantes


Anúncios Google