Buscar

Estrutura de Dados em C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Estruturas de Dados - Listas Lineares
AULA 04
Ocupação Circular
Listas com Descritor
AULA 04
Ocupação Circular
Listas com Descritor
Estruturas de Dados - Listas Lineares
Ocupação CircularOcupação Circular
Estruturas de Dados - Listas Lineares
Ocupação circular
5 6 7 8 92 3 40 1 10 11 12
Início 
da LLFinal 
da LL
X
Estruturas de Dados - Listas Lineares
Ocupação circular
Problema dos Algoritmos
Estruturas de Dados - Listas Lineares
Ocupação circular
Problema dos Algoritmos
Início 
da LL
Final 
da LL
Início 
da LL
Final 
da LL
Estruturas de Dados - Listas Lineares
16 17 18 19 2013 14 1511 12 21 22 23
Ocupação circular utilizando parte do 
arranjo
Início 
da LLFinal 
da LL
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
Espaço para L1 Espaço para L2
Início 
da LL
Final 
da LL
Início 
da LL
Final 
da LL
Estruturas de Dados - Listas Lineares
• Dados
– ???? 
• Operações
– ?????
Lista linear – TAD Genérico
Estruturas de Dados - Listas Lineares
• Dados
typedef struct T_Produto {
int cod;
char nome[40];
float preco; 
}TProduto;
int inicio, fim, maximo; 
TProduto Lista[MAX];
• Operações
– void inicializa (TProduto t[], int *inicio, int *fim);
– void insere (TProduto t[], int *inicio, int *fim, int posicao);
– void remove (TProduto t[], int *inicio, int *fim, int posicao);
– int consulta ( TProduto t[], int inicio, int fim, int posicao)
– void destroi (TProduto t[], int *inicio, int *fim);
Lista linear – TAD Genérico
Estruturas de Dados - Listas Lineares
Listas com DescritorListas com Descritor
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
• ... 5 6 7 8 92 3 40 1 10 11 12
42 5 17 9
6 6 32 7
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
5 6 7 8 92 3 40 1 10 11 12
X
Descritor de LLDLista
42 5 17 9
6 6 32 7
Estruturas de Dados - Listas Lineares
Lista vazia com descritor
6 7 8 9 103 4 51 2 11 12X
DLista 0-1 -1
Comprimento da lista
Último nodo da lista
Primeiro nodo da lista
5 6 7 8 92 3 40 1 10 11
Estruturas de Dados - Listas Lineares
Acesso à LL com Descritor em 
forma de arranjo
x[DLista[0]].nome � Nome contido no primeiro nodo da lista
x [DLista[1]].preco� Valor contido no último nodo da lista
DLista[2] � comprimento da lista. A informação está contida 
diretamente no descritor, não sendo necessário percorrer a 
lista para obtê-la.
typedef struct T_Produto {
int cod;
char nome[40];
float preco; 
}TProduto;
int DLista[3];
Estruturas de Dados - Listas Lineares
Acesso à LL com Descritor em 
forma de registro
X [DLista.inicio].Nome � Nome contido no primeiro nó da lista
X [DLista.fim].Valor � Valor contido no último nó da lista
DL.maior � 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.
typedef struct T_Descritor {
int inicio;
int fim;
int maior; 
}TDescritor;
typedef struct T_Produto {
int cod;
char nome[40];
float preco; 
}TProduto;
Estruturas de Dados - Listas Lineares
• facilidade de referência à lista
void insere (TProduto t[], TDescritor d[], int posicao);
em vez de 
void insere (TProduto t[], int *inicio, int *fim, int posicao);
• afastamento do usuário dos detalhes da 
representação interna
Vantagens da utilização de
descritor
Estruturas de Dados - Listas Lineares
IA IL N FAFL
Descritor informando espaço disponível 
para a lista no arranjo
5 6 7 8 92 3 40 1 10 11 12
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
0 122 7
Índice de início da lista
Índice de final da lista
ÍNDICES !!!
X
DLista
Estruturas de Dados - Listas Lineares
Descritor informando espaço disponível 
para a lista no arranjo
16 17 18 19 2013 14 1511 12 21 22 23
IA IL N FAFL
2212 13 186
X
DLista
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 FAFL
Espaço para L1 Espaço para L2
18 20 5 24 24
IA IL N FAFL
Estruturas de Dados - Listas Lineares
16 17 18 19 2013 14 1511 12 21 22 23
IA IL N FAFL
2311 13 186
A
Declarações para os algoritmos
apresentados
Algoritmos implementando a alocação circular - mais complexos 
mas mais eficientes
Estruturas de Dados - Listas Lineares
Lista vazia com descritor
5 6 7 8 92 3 40 1 10 11 12
IA IL N FAFL
120 -1 -10
IA IL N FAFL
2311 -1 -10 OU
IA IL N FAFL
2311 10 100
16 17 18 19 2013 14 1511 12 21 22 23
DLista
L
DLista DLista
L
Estruturas de Dados - Listas Lineares
IA IL N FAFL
2311 13 186
Inserir novo nodo
LL com descritor - contigüidade física
16 17 18 19 2013 14 1511 12 21 22 23
ANo início
16 17 18 19 2013 14 1511 12 21 22 23
ANo final
16 17 18 19 2013 14 1511 12 21 22 23
ANo meio
Estruturas de Dados - Listas Lineares
Inserir novo nodo no início
LL com descritor - contigüidade física
IA IL N FAFL
2311 13 186
16 17 18 19 2013 14 1511 12 21 22 23
A
16 17 18 19 2013 14 1511 12 21 22 23
A?
IA IL N FAFL
2311 11 186
16 17 18 19 2013 14 1511 12 21 22 23
A
197
712
Estruturas de Dados - Listas Lineares
Inserir novo nodo no final
LL com descritor - contigüidade física
IA IL N FAFL
2311 13 186
16 17 18 19 2013 14 1511 12 21 22 23
A
7 19
A
16 17 18 19 2013 14 1511 12 21 22 23
?
IA IL N FAFL
2311 188 231615
16 17 18 19 2013 14 1511 12 21 22 23
A
9
Estruturas de Dados - Listas Lineares
Inserir novo nodo no meio
LL com descritor - contigüidade física
IA IL N FAFL
2311 13 186
16 17 18 19 2013 14 1511 12 21 22 23
A
Pos = 3
16 17 18 19 2013 14 1511 12 21 22 23
A
197
• FL = FA - abrir espaço para a frente, alterando IL
Estruturas de Dados - Listas Lineares
• Dados
– ???? 
• Operações
– ?????
Lista linear – TAD Genérico
Estruturas de Dados - Listas Lineares
• Dados
typedef struct T_Produto {
int cod;
char nome[40];
float preco; 
}TProduto;
• Operações
– void inicializa (TProduto t[], TDescritor *d);
/*inicializa as variáveis do descritor e percorre o array zerando todas as posições*/
– void insere (TProduto t[], TDescritor *d, int posicao);
/*insere um novo produto na posição desejada e atualiza descritor*/
– void remove (TProduto t[], TDescritor *d, int posicao);
/*remove o produto da posição especificada deslocando os elementos do array*/
– int consulta ( TProduto t[], TDescritor d, int posicao);
/*consulta o elemento da posição especificada*/
– void destroi (TProduto t[], TDescritor *d);
/* reinicializa o array*/
Lista linear – TAD Genérico
typedef struct T_Descritor {
int inicio;
int fim;
}TDescritor;
Estruturas de Dados - Listas Lineares
Exercício
• Implementar uma função para a inserção 
de produtos em ordem alfabética em uma 
lista.
– A função deve utilizar ocupação circular
– Os deslocamentos de elementos devem ser 
otimizados
– Utilizar um descritor em forma de registro 
para facilitar o acesso à lista

Outros materiais