AULA 04 Ocupação Circular Listas com Descritor
Ocupação Circular
Ocupação circular Final da LL Início da LL X 1 2 3 4 5 6 7 8 9 10 11 12 13
Ocupação circular utilizando parte do arranjo Final da LL Início da LL
Ocupação Circular duas listas sobre o mesmo arranjo IA IL N FL FA 10 11 4 14 17 IA IL N FL FA 18 20 56 24 18 24 9 10 24 25 26 27 Espaço para L1 Espaço para L2
Lista linear TAD Genérico 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-ésimonodo 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)
Listas com Descritor
Listas Lineares com Descritor Descritor contém diversas informações sobre a lista linear : localização acesso estrutura conteúdo 7 9 3 8 2 5 1 6 7 4... 1 2 3 4 5 6 7 8 9 10 11 12 13 4
Exemplo de descritor í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 DLista 3 8 6 7 4 Descritor de LL X 7 9 2 5 1 4 1 2 3 4 5 6 7 8 9 10 11 12 13
Lista vazia com descritor Primeiro nodo da lista Último nodo da lista Comprimento da lista DescrLL 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 X 1 2 3 4 5 6 7 8 9 10 11 12
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.
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.
Vantagens da utilização de 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
Descritor informando espaço disponível para a lista no arranjo Índice de início da lista Índice de final da lista Índice de início do espaço disponível no arranjo DLista Nr. Nodos da lista IA IL N FL FA 1 3 6 8 13 Índice de final do espaço disponível no arranjo ÍNDICES!!! X 1 2 3 4 5 6 7 8 9 10 11 12 13
Descritor informando espaço disponível para a lista no arranjo IA IL N FL FA DLista 12 13 6 18 22 X
Duas LL implementadas sobre o mesmo arranjo, com descritores IA IL N FL FA 10 11 4 14 17 IA IL N FL FA 18 20 5 24 24 9 10 24 25 26 27 Espaço para L1 Espaço para L2
Declarações para os algoritmos apresentados TipoDescr registro IA : inteiro; IL : inteiro; N : inteiro; FL : inteiro; FA : inteiro; fim; A : arranjo [11.. 23] de TipoNodo Algoritmos implementando a alocação circular - mais complexos mas mais eficientes IA IL N FL FA 11 13 6 18 23 A
Lista vazia com descritor IA IL N FL FA DescrL 1 0 0 0 13 L 1 2 3 4 5 6 7 8 9 10 11 12 13 DescrL IA IL N FL FA 11 0 0 0 23 OU DescrL IA IL N FL 11 10 0 10 FA 23 L
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;
Inserir novo nodo LL com descritor - contigüidade física IA IL N FL FA 11 13 6 18 23 No início A No final A No meio A
Inserir novo nodo no início LL com descritor - contigüidade física IA IL N FL FA 11 12 13 76 18 23 A IA IL N FL FA 11 11 67 19 18 23? A A
Inserir novo nodo no final LL com descritor - contigüidade física IA IL N FL FA 11 13 67 19 18 23 A IA IL N FL FA 11 16 15 89 23 18 23? A A
Inserir novo nodo no meio LL com descritor - contigüidade física IA IL N FL FA 11 13 67 18 19 23 Pos = 3 A A FL = FA - abrir espaço para a frente, alterando IL
Lista linear TAD Genérico 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-ésimonodo 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; Descritor = record iniarranjo : integer; fimarranjo : integer; inilista : integer; fimlista : integer; num : integer; end
Lista linear TAD Genérico Operações procedure inicializa(var d: Descritor; ini, fim: integer); // inicializa a lista. ini e fim representam a área a ser ocupada pela lista function insere(var d: Descritor; val: Info; k: integer; var x: Lista): boolean; // insere um nodo em uma lista, na posição K function removek(var d: Descritor; k: integer; var x: Lista): boolean; // remove um nodo da posição K function removeval(var d: Descritor; val: info; var x: Lista): boolean; // remove um nodo cujo valor é val function altera (d: Descritor; x: Lista; k: integer; var val: Info): boolean; // altera o nodo da posição K function consulta (d: Descritor; x: Lista; val: Info): inteiro; // devolve a posição (o índice no arranjo) do nodo para o qual o campo valor é igual ao valor buscado (val)