Cap 6 - Vets Listas e Seqs-4spp

public position atrank int rank on time dnode

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: ncia para o próximo nó. Nós sentinelas trailer e header. header " " Métodos baseados em posição executam em tempo constante O(1). Métodos baseados em colocação precisam encontrar a posição correspondente a partir do header ou trailer: O (n). nós/posições trailer " Aplicações Indiretas: !  Componente básico para estruturas de dados mais complexas. 27 elementos 28 Implementação Java (parcial) interface Sequence extends List, Vector { // Additional "bridging" methods: public Position atRank(int rank) throws BoundaryViolationException; public int rankOf(Position position) throws InvalidPositionException; } public class NodeSequence extends NodeList implements Sequence { // Check that rank is in the range [0,numElts-1]; O(1) time protected void checkRank(int rank) throws BoundaryViolationException { if (rank < 0 || rank >= numElts) throw new BoundaryViolationException("Rank " + rank + " is invalid for this sequence of " + numElts + " elements."); } public Position atRank (int rank) { // O(n) time DNode node; checkRank(rank); if (rank <= size()/2) { // scan forward from the head node = header.getNext(); for (int i=0; i < rank; i++) node = node.getNext(); } else { // scan backward from the tail node = trailer.getPrev(); for (int i=1; i < size()-rank; i++) node = node.getPrev(); } return node; } // . . . (skipping methods elemAtRank(r) and rankOf(p)) public void insertAtRank (int rank, Object element) throws BoundaryViolationException { // O (n) time if (rank == size()) // we shouldn't checkRank in this case insertLast(element); else { Implementação baseada em Vetor " " checkRank(rank); insertBefore(atRank(rank), element); } Um objeto do (novo) tipo posição armazena: } public Object removeAtRank (int rank) throws BoundaryViolationException { // O(n) time checkRank(rank); return remove(atRank(rank)); } !  !  Índices f e l mantêm o controle da 1a e última posições. " } // Close class NodeSequence...
View Full Document

Ask a homework question - tutors are online