Upload
fisseha
View
26
Download
0
Embed Size (px)
DESCRIPTION
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). - PowerPoint PPT Presentation
Citation preview
LISTAS “LINKADAS”No Mapeamento Seqüencial tem-se o problema dere-organizar as seqüências de informações nasoperações de inserções e remoções
Uma solução elegante para mover dados emrepresentações seqüenciais é o uso deListas “Linkadas” (Linked Lists)
A localização dos elementos em Listas “Linkadas”pode estar em qualquer lugar da memória. Fatorimportante - numa representação seqüencial, aordem dos elementos é a mesma de uma listaordenada. NO caso de Lista “linkada”, a ordem nãonecessariamente é a mesma.
LISTAS “LINKADAS” (cont.)
Acesso correto ao próximo elemento para Listas“linkadas” - é necessário ter uma outra informaçãoindicando 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
3 4 9 5
F
LISTAS “LINKADAS” (cont.)
Capacidade de dividir a informação emDado 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
Supõe-se que um mecanismo de criar um tipoNó com duas partes: Dado e Link;Também supõe-se que duas funções new e deleterespectivamente para criarcriar um novo Nóe para devolverdevolver um Nó
LISTAS “LINKADAS” (cont.)
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 ( );}
p
100
firstlast
p
1
lastp
10
lastp
50
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ÍCIOEXERCÍ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)
xaxaxA ee
m
m 1
1 ...)(
coef exp link
A(x) = 3x14 + 2x8 + 1
3 14 2 8 1 0
3 14 2 8 1 0
2 14 2 9 2 7
A =
B =
pa
pb
5 14 2 9 2 8 2 7
1 0
EXERCÍCIOEXERCÍCIO: Utilizando o recurso de ALOCAÇÃO DINÂMICA,implementar a soma de polinômios.