LISTAS “LINKADAS” No Mapeamento Seqüencial tem-se o problema de

Slides:



Advertisements
Apresentações semelhantes
Jesus (Yahshua) nosso Senhor foi levantado em um sábado Semanal
Advertisements

CONVERSATION GUIDE Austrian Finnish Italian Portuguese.
Presenter’s Notes Some Background on the Barber Paradox
UICC HPV e CÂNCER CERVICAL CURRÍCULO.
“Campo e Cidade se dão as mãos”
Efeitos Biológicos Associados à Telefonia Celular:
Emergências em Marinas
Transcrição da apresentação:

LISTAS “LINKADAS” No Mapeamento Seqüencial tem-se o problema de re-organizar as seqüências de informações nas operações de inserções e remoções Uma solução elegante para mover dados em representações seqüenciais é o uso de Listas “Linkadas” (Linked Lists) A localização dos elementos em Listas “Linkadas” pode estar em qualquer lugar da memória. Fator importante - numa representação seqüencial, a ordem dos elementos é a mesma de uma lista ordenada. NO caso de Lista “linkada”, a ordem não necessariamente é a mesma.

LISTAS “LINKADAS” (cont.) Acesso correto ao próximo elemento para Listas “linkadas” - é necessário ter uma outra informação indicando a localização desse próximo elemento. Convenção usada para representar Listas “linkadas”: NÓ, que consiste dos dados junto com informação do “link” para ter acesso ao próximo bat cat eat fat wat . . . - 8 3 4 9 7 5 F

LISTAS “LINKADAS” (cont.) Capacidade de dividir a informação em Dado e Link  Nó Mecanismo para “criar” um novo Nó Mecanismo para “devolver” um Nó para memória  A L O C A Ç Ã O D I N Â M I C A

LISTAS “LINKADAS” (cont.) Supõe-se que  um mecanismo de criar um tipo Nó com duas partes: Dado e Link; Também supõe-se que  duas funções new e delete respectivamente para criar um novo Nó e para devolver um Nó Dado Link Nó

class Node { private: int dado; Node * link; public: Node ( ) { dado = 0; link = 0; } ~Node ( ) { } int getDado ( ) { return dado; } void putDado ( int valor ) { dado = valor; } Node* getLink ( ) { return link; } void putLink ( Node * p ) { link = p; } void printOn ( ) { cout << dado << “\n”; } }

class List { private: Node *first, *last; public: List ( ) { } ~List ( ) { } void insert ( int elemento ) Node * p = new Node; p->putDado ( elemento ); if ( first == 0 ) first = last = p; else last->putLink ( p ); last = p; } void printon ( ); void printOn ( ) { Node * p = first; while ( p != 0 ) cout << p->printOn(); p = p->getLink( ); } void main ( ) { List l1; l1.insert ( 100 ); l1.insert ( 1 ); l1.insert ( 10 ); l1.insert ( 50 ); l1.printOn ( ); }

100 1 10 50 p p p p last first last last last Esta implementação refere-se à qual estrutura de dados já vista??? FILA - utilizando lista “linkada”

Top P I L H A .

Operação de inserção na Pilha utilizando estrutura de lista “linkada” insereNaPilha ( Node * Top, Type elemento ) { Node * p = new Node p->Dado = elemento if ( Top == 0 ) Top = p else p->Link = Top Top = p } E a operação de remoção? EXERCÍCIO: Utilizando o recurso de ALOCAÇÃO DINÂMICA, implementar as operações sobre uma lista “linkada”.

SOMA DE POLINÔMIOS O problema de manipular polinômios utilizando listas “linkadas” é um exemplo clássico. Representar qualquer número de diferentes polinômios (Memória) coef exp link A(x) = 3x14 + 2x8 + 1 3 14 2 8 1

3 14 2 8 1 A = pa 2 14 9 7 B = pb 5 14 2 9 8 7 1 EXERCÍCIO: Utilizando o recurso de ALOCAÇÃO DINÂMICA, implementar a soma de polinômios.