LISTAS DUPLAMENTE LIGADAS Qual o problema com listas simples? - a partir de uma posição p só dá para caminhar numa direção - se precisar acessar o nó anterior, não há outra maneira a não ser voltar ao início - a necessidade de remover um nó arbitrário requer a informação sobre o endereço do nó anterior. POR QUE? LISTAS DUPLAMENTE LIGADAS (cont.) Uma solução é adotar listas DUPLAMENTE ligadas. Um nó típico, além de conter o dado, contém informação sobre o endereço do nó anterior e informação sobre o endereço do nó posterior rlink llink p = rlink ( llink ( p ) ) = llink ( rlink ( p ) ) LISTAS DUPLAMENTE LIGADAS (cont.) Algoritmo de Remoção dDelete ( x ) { rlink ( llink ( x ) ) rlink ( x ) llink ( rlink ( x ) ) llink ( x ) } LISTAS DUPLAMENTE LIGADAS (cont.) Algoritmo de Inserção dInsert ( p, x ) { // insere p a direita do nó x llink ( p ) x rlink ( p ) rlink ( x ) llink ( rlink ( x ) ) p rlink ( x ) p } Listas Generalizadas System E2 E1 a2 a1 P2 W2 W P1 W1 W r2 r1 f2 f1 c1 c2 B1 Supervisor tr[in(B2) in(B1)] tr[in(B1)] C1 WS s1/c1 B2 C2 s2/c2 Biblioteca STL (Standard Template Library)