Академический Документы
Профессиональный Документы
Культура Документы
8 Listas Encadeadas
Tpicos Principais
Motivao
Listas encadeadas
Implementaes recursivas
Listas de tipos estruturados
Tpicos Complementares
Listas circulares
Listas duplamente encadeadas
Listas heterogneas
Motivao
Vetor
ocupa um espao contguo de memria
VETOR
Motivao
Estruturas de dados dinmicas:
crescem (ou decrescem) medida que elementos so inseridos
(ou removidos)
Exemplo:
listas encadeadas:
amplamente usadas para implementar outras estruturas de dados
Listas Encadeadas
lst
Info1
Info2
Info3
...
InfoN
NULL
Lista encadeada:
seqncia encadeada de elementos, chamados de ns da lista
n da lista representado por dois campos:
a informao armazenada e
o ponteiro para o prximo elemento da lista
info
info
NULL
10
lst
val
Info1
Info2
Info3
11
lst
45
23
12
lst
Info1
p
Info2
p
Info3
...
p
InfoN
13
14
15
Info1
Info2
Info3
Info1
Info2
Info3
16
17
*/
*/
*/
18
Listas Encadeadas
Manuteno da lista ordenada
funo de insero percorre os elementos da lista
at encontrar a posio correta para a insero do novo
lst
Info1
Novo
Info2
Info3
Info4
Novo
19
20
lst
Info1
Sub-lista
21
22
23
24
25
Igualdade de listas
int lst_igual (Elemento* lst1, Elemento* lst2);
implementao no recursiva
percorre as duas listas, usando dois ponteiros auxiliares:
se duas informaes forem diferentes,
as listas so diferentes
27
28
implementao recursiva
se as duas listas dadas so vazias, so iguais
se no forem ambas vazias, mas uma delas vazia, so
diferentes
se ambas no forem vazias, teste
se informaes associadas aos primeiros ns so iguais e
se as sub-listas so iguais
29
30
31
32
33
34
Tpicos Complementares
35
Listas Circulares
Lista circular:
o ltimo elemento tem como prximo o primeiro elemento da
lista, formando um ciclo
a lista pode ser representada por um ponteiro para um elemento
inicial qualquer da lista
L
Info1
Info2
Info3
36
Listas Circulares
Exemplo - Funo para imprimir uma lista circular
visita todos os elementos a partir do ponteiro do elemento inicial
at alcanar novamente esse mesmo elemento
se a lista vazia, o ponteiro para um elemento inicial NULL
/* funo imprime: imprime valores dos elementos */
void lcirc_imprime (Elemento* lst)
{
Elemento* p = lst;
/* faz p apontar para o n inicial */
/* testa se lista no vazia e ento percorre com do-while */
if (p!=NULL) {
do {
printf("%d\n", p->info);
/* imprime informao do n */
p = p->prox;
/* avana para o prximo n */
} while (p != lst);
}
(c) Dept. Informtica - PUC-Rio
}
37
Info2
Info3
38
tipo Lista2
tipo dos ns da lista
(c) Dept. Informtica - PUC-Rio
39
lst
Info1
Info2
Info3
40
41
42
43
Listas heterogneas
A representao da informao por um ponteiro permite
construir listas heterogneas, isto , listas em que as
informaes armazenadas diferem de n para n
44
Exemplo:
listas de retngulos, tringulos ou crculos
reas desses objetos so dadas por:
r b*h
b*h
t
2
c r2
45
struct retangulo {
float b;
float h;
};
typedef struct retangulo Retangulo;
struct triangulo {
float b;
float h;
};
typedef struct triangulo Triangulo;
struct circulo {
float r;
};
typedef struct circulo Circulo;
(c) Dept. Informtica - PUC-Rio
46
tipo
tipo
tipo
tipo
...
b
h
b
h
b
h
47
48
49
51
52
53
Resumo
L
Listas encadeadas
Info1
Info2
Info3
Listas circulares
Listas duplamente
encadeadas
Info1
Info2
Info3
L
Info1
Info2
Info3
54
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel,
Introduo a Estruturas de Dados, Editora Campus
(2004)
Captulo 10 Listas encadeadas
55