Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMatheushenrique Leyton Alterado mais de 10 anos atrás
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 Nó
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.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.