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

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

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

Apresentações semelhantes


Apresentação em tema: "LISTAS “LINKADAS” No Mapeamento Seqüencial tem-se o problema de"— Transcrição da apresentação:

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

2 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

3 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

4 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

5 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”; } }

6 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 ( ); }

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

8 Top P I L H A .

9 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”.

10 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

11 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.


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

Apresentações semelhantes


Anúncios Google