Cap 6 - Vets Listas e Seqs-4spp

Setelemente vsetprevp liga v ao seu predecessor p

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: tam” o TAD posição e armazenam: prev next (5,3,8) replaceElement(p3,7) " !  !  !  " Note que replaceElement() e swapElements() não alteram as posições, mas apenas seus elementos. 15 elemento. referência para o nó anterior. referência para o próximo nó. elemento nó Nós especiais header e trailer. header • Estrutura de Dados • Estrutura de Dados booleano isFirst(p), isLast(p). nós/posições trailer elementos 16 Inserção Algoritmo " Pode-se visualizar a operação insertAfter(p, X), que retorna a Algoritmo insertAfter(p,e): Crie um novo nodo v v.setElement(e) v.setPrev(p) {liga v ao seu predecessor, p} v.setNext(p.getNext()) {liga v ao seu sucessor} (p.getNext()).setPrev(v) {liga velho sucessor de p a v} p.setNext(v) {liga p ao seu novo sucessor, v} retorna v {a posição criada para o elemento e} nova posição q criada para armazenar o elemento X. p B C p • Estrutura de Dados A after(p) q B C X p A q B X C 17 • Estrutura de Dados A Remoção Nota. Métodos setElement(), setPrev() e getNext() são métodos da classe DLNode (cap. 4). 18 Algoritmo de Remoção " Pode-se visualizar remove(p), onde p = last() A B C A B C p Algoritmo remove(p): t = p.getElement() {variável temporária} (p.getPrev()).setNext(p.getNext()) (p.getNext()).setPrev(p.getPrev()) p.setPrev(null) p.setNext(null) {desconecta a posição p} retorna t D p A B C 19 • Estrutura de Dados • Estrutura de Dados D Se uma posição não precede nem sucede uma outra esta posição é inválida (independente de alguma outra referência estar apontando para ela). 20 Implementação Java (parcial) class DNode implements Position { private DNode prev, next; // References to the nodes before and after private Object element; // Element stored in this position // Constructor public DNode(DNode newPrev, DNode newNext, Object elem) { prev = newPrev; next = newNext; element = elem; } Desempenho " Na implementação do TAD Lista por meio de uma lista duplamente encadeada: // Method from interface Position public Object element() throws InvalidPositionException { if ((prev == null) && (next == null)) throw new InvalidPositionException("Position is not in a list!"); return element; } // Accessor methods public DNode getNext() { return next; } public DNode getPrev() { return prev; } // Update methods public void setNext(DNode newNext) { next = newNext; } O espaço utilizado por uma lista com n elementos é O(n)...
View Full Document

Ask a homework question - tutors are online