Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
AULA 04
Ocupação Circular
Listas com Descritor
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Ocupação Circular
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Ocupação circular
6
7
8
9 10
3
4
5
1
2
11 12 13
Início
da LL
Final
da LL
X
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
16 17 18 19 20
13 14 15
11 12
21 22 23
Ocupação circular utilizando parte do
arranjo
Início
da LL
Final
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Ocupação Circular
duas listas sobre o mesmo arranjo
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
10 11 4 14 17
IA IL N
FL
FA
Espaço para L1
Espaço para L2
18 20 5 24 24
IA IL N
FL
FA
18 20 6 18 24
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
• Dados
– ????
• Operações
– ?????
Lista linear – TAD Genérico
• Dados
– Tipo de dados para armazenar os elementos da lista
– Componentes para controle da estrutura lista
• Operações
– inicializa(): Cria lista
– insere(): Insere um nodo na k-ésima posição da lista
– remove(): Remove o k-ésimo nodo da lista
– consulta(): Consulta o k-ésimo nodo da lista
– altera(): Substitui o nodo na k-ésima posição da lista
por outro
– Destroi(): destrói a lista
Lista linear – TAD Genérico
•
Dados
– type Lista = array [1..n] of Info;
– início e final da lista
– tamanho do arranjo
•
Operações
– procedure inicializa (var ini, fim : integer);
// inicializa com zeros o início e o fim da lista
– function insere (var x: Lista; k: integer ; val: Info; var ini, fim: integer):
boolean;
// insere um nodo em uma lista, na posição K
– function removeK(var x: Lista; k: integer; var ini, fim: integer): boolean;
// remove um nodo da posição K
– function removeVal(var x: Lista; val: info; var ini, fim: integer): boolean;
// remove um nodo cujo valor é val
– function altera (x: Lista; k, ini, fim: integer; var val: Info): boolean;
// altera o nodo da posição K
– function consulta (x: Lista; ini, fim: integer; val:Info): integer;
// devolve a posição (o índice no arranjo) do nodo para o qual o campo valor é igual
ao valor buscado (val)
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Listas com Descritor
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Listas Lineares com Descritor
Descritor
contém diversas informações
sobre a lista linear :
•
localização
•
acesso
•
estrutura
•
conteúdo
•
...
1
2
3
4
5
6
7
8
9 10
11 12 13
4
2
5
1
7
9
6
7
4
3
8
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
•
índice do início da lista
•
índice do final da lista
•
comprimento da lista
•
índice do menor valor contido na lista
•
índice do maior valor contido na lista
Exemplo de descritor
6
7
8
9 10
3
4
5
1
2
11 12 13
X
Descritor de LL
DLista
4
2
5
1
7
9
6
7
4
3
8
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Lista vazia com descritor
6
7
8
9
10
3
4
5
1
2
11 12
X
DescrLL
0
0
0
Comprimento da lista
Último nodo da lista
Primeiro nodo da lista
6
7
8
9
10
3
4
5
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Acesso à LL com Descritor em
forma de arranjo
TipoNodo = registro
cod: inteiro;
nome: string;
valor: real;
Fim;
X [DLista[2]].Nome Nome contido no primeiro nodo da lista
X [DLista[3]].Valor Valor contido no último nodo da lista
DLista[4] comprimento da lista. A informação está contida
diretamente no descritor, não sendo necessário percorrer a
lista para obtê-la.
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Acesso à LL com Descritor em
forma de registro
TipoDescritor = registro
IndIni: inteiro;
IndFim: inteiro;
MaiorValor: real;
Fim;
X [DL.IndIni].Nome Nome contido no primeiro nó da lista
X [DL.IndFim].Valor Valor contido no último nó da lista
DL.MaiorValor Maior valor contido no campo valor de
todos os nós da lista. Neste caso não é necessário acessar
o arranjo, pois a informação já está contida no descritor.
•
facilidade de referência à lista
Proc Constroi_ll (var DLista: TipoDescritor)
em vez de
Proc Constroi_ll (var Ini,Fim: TipoLista; var N: inteiro, … )
•
afastamento do usuário dos detalhes da
representação interna
Vantagens da utilização de
descritor
IA IL N
FL
FA
Descritor informando espaço disponível
para a lista no arranjo
6
7
8
9 10
3
4
5
1
2
11 12 13
Nr. Nodos
da lista
6
Índice de início do espaço
disponível no arranjo
Índice de final do
espaço disponível
no arranjo
1
3
8
13
Índice de início da lista
Índice de final da lista
ÍNDICES !!!
X
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Descritor informando espaço disponível
para a lista no arranjo
16 17 18 19 20
13 14 15
11 12
21 22 23
IA IL N
FL
FA
22
12 13
6
18
X
DLista
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Duas LL implementadas sobre o
mesmo arranjo, com descritores
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
10 11 4 14 17
IA IL N
FL
FA
Espaço para L1
Espaço para L2
18 20 5 24 24
IA IL N
FL
FA
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
16
17
18
19
20
13
14
15
11
12
21
22
23
IA
IL
N
FL
FA
23
11
13
6
18
TipoDescr
registro
IA : inteiro;
IL : inteiro;
N : inteiro;
FL : inteiro;
FA : inteiro;
fim;
A : arranjo [11 .. 23] de TipoNodo
A
Declarações para os algoritmos
apresentados
Algoritmos implementando a alocação circular - mais complexos
mas mais eficientes
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Lista vazia com descritor
6 7 8 9 10
3 4 5
1 2
11 12 13
IA IL
N
FL
FA
13
1
0
0
0
IA IL N
FL
FA
23
11 0
0
0
OU
IA IL N
FL
FA
23
11 10
0
10
16 17 18 19 20
13 14 15
11 12
21 22 23
DescrL
L
DescrL
DescrL
L
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Inicialização do descritor para lista
vazia com descritor
Proc
InicializarDescritor
(var DescrL: TipoDescritor;
IniArea, FimArea: inteiro);
início
IL := 0;
FL := 0;
N := 0;
IA := IniArea;
FA := FimArea;
fim InicializarDescritor;
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
IA
IL
N
FL
FA
23
11
13
6
18
Inserir novo nodo
LL com descritor - contigüidade física
16
17
18
19
20
13
14
15
11
12
21
22
23
A
No início
16
17
18
19
20
13
14
15
11
12
21
22
23
A
No final
16
17
18
19
20
13
14
15
11
12
21
22
23
A
No meio
Inserir novo nodo no início
LL com descritor - contigüidade física
IA
IL
N
FL
FA
23
11
13
6
18
16
17
18
19
20
13
14
15
11
12
21
22
23
A
16
17
18
19
20
13
14
15
11
12
21
22
23
A
?
IA
IL
N
FL
FA
23
11
11
6
18
16
17
18
19
20
13
14
15
11
12
21
22
23
A
19
7
7
12
Inserir novo nodo no final
LL com descritor - contigüidade física
IA
IL
N
FL
FA
23
11
13
6
18
16
17
18
19
20
13
14
15
11
12
21
22
23
A
7
19
A
16
17
18
19
20
13
14
15
11
12
21
22
23
?
IA
IL
N
FL
FA
23
11
16
15
8
18
23
16
17
18
19
20
13
14
15
11
12
21
22
23
A
9
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
Inserir novo nodo no meio
LL com descritor - contigüidade física
IA
IL
N
FL
FA
23
11
13
6
18
16
17
18
19
20
13
14
15
11
12
21
22
23
A
Pos = 3
16
17
18
19
20
13
14
15
11
12
21
22
23
A
19
7
•
FL = FA - abrir espaço para a frente, alterando IL
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
• Dados
– ????
• Operações
– ?????
Lista linear – TAD Genérico
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
• Dados
– Tipo de dados para armazenar os elementos da lista
– Componentes para controle da estrutura lista
• Operações
– inicializa(): Cria lista
– insere(): Insere um nodo na k-ésima posição da lista
– remove(): Remove o k-ésimo nodo da lista
– consulta(): Consulta o k-ésimo nodo da lista
– altera(): Substitui o nodo na k-ésima posição da lista
por outro
– Destroi(): destrói a lista
Lista linear – TAD Genérico
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares
•
Dados
type Lista = array [1..n] of Info;
Descritor = record
iniArranjo : integer;
fimArranjo : integer;
iniLista : integer;
fimLista : integer;
num : integer;
end
Clesio S. Santos - Nina Edelweiss - Renata de M. Galante Estruturas de Dados - Listas Lineares