Variáveis Dinâmicas Caixas de Nós

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Recursividade Inhaúma Neves Ferraz
Estruturas de Dados Marcio Gonçalves.
Recursividade Prof. Rosana Palazon.
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
Programação II Estruturas de Dados
Alocação Dinâmida de Memória
Gerenciamento de Arquivos, Páginas e Registros
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Recursividade Inhaúma Neves Ferraz
Arquivos Seqüenciais Inhaúma Neves Ferraz
Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Alocação Dinâmica de Memória
SSC SISTEMAS OPERACIONAIS I Aula 15 – Gerenciamento de Memória
Estruturas de Dados e Algoritmos
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade de Brasília
Aula 4 Nomes, Vinculações, Tipos e Escopos
Robson Godoi / Sandra Siebra
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Listas Encadeadas.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Prof.° Jean Daniel Henri Merlin Andreazza Estrutura de Dados
Professor Reverton de Paula Faculdade Anhanguera de Indaiatuba
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso B: Remover o elemento que está no meio da lista, sendo que a lista possui vários.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 02a Roberto Ferrari Mauricio Falvo.
Ponteiros Variáveis do tipo “ponteiro” armazenam endereços de memória
Linguagem de Programação II Parte IX
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 02b Roberto Ferrari Mauricio Falvo.
Estrutura de Dados Unidade 9 Simulação do exercício 9.2 CASO 04b Roberto Ferrari Mauricio Falvo.
INTELIGÊNCIA ARTIFICIAL
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso D: Remover elemento que é único na lista. Roberto Ferrari Mauricio Falvo.
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso C: Tentar remover elemento que não está na lista. Roberto Ferrari Mauricio Falvo.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estruturas de Dados com Jogos
Alocação Dinâmica de Memória
Estrutura de Dados Unidade 6 Simulação do exercício 6.1 Elaborada por Mauricio Falvo.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Ponteiros
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Estrutura de Dados Unidade 10 Simulação do Algoritmo 10.3 REMOVER Caso A: Remover o elemento que está no primeiro nó da lista, sendo que a lista possui.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Listas Simplesmente Encadeadas
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 17: Estruturas Genéricas
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Estruturas de Dados Dinâmicas IF672 - Algoritmos e Estruturas de Dados.
Estrutura de Dados Aula 3 - Listas
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Lista Ligada Estrutura de Dados II Prof. Gale. Vantagens  Crescem (ou decrescem) à medida que elementos são inseridos (ou removidos)  seqüência encadeada.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Transcrição da apresentação:

Variáveis Dinâmicas Caixas de Nós Inhaúma Neves Ferraz Departamento de Ciência da Computação Universidade Federal Fluminense ferraz@ic.uff.br

Sumário Dados estáticos e dinâmicos Variáveis dinâmicas Caixa de nós Conceito Funções que tratam de caixas de nós Implementação em memória Implementação em memória secundária

Variáveis Dinâmicas Caixas de Nós

Dados estáticos e dinâmicos Os tipos de dados e as estruturas de dados utilizados nos algoritmos e programas podem ser estáticos e dinâmicos No primeiro caso a alocação de espaço de memória é feita uma só vez e é imutável Para melhor aproveitar os espaços disponíveis pode-se postergar as solicitações de memória até a ocasião de sua necessidade real e liberar espaços tornados desnecessários em processos que evoluam dinamicamente 4

Variáveis Dinâmicas Pode-se utilizar um processo de alocação de memória de forma dinâmica, isto é, só requisitar memória no momento de utilização de cada registro Isto é feito declarando uma variável como sendo um ponteiro para um tipo específico de objeto e criando dinamicamente objetos desse tipo e atribuindo seu endereço à variável ponteiro 5

Caixa de nós (1) A alocação de espaços requeridos pelos algoritmos e programas pode ser considerada como a manipulação de registros originados em uma “CAIXA DE NÓS” Esta caixa de nós contém, inicialmente, um número finito de registros Os programas só tem acesso à caixa de nós através das operações getnode e freenode A criação de uma lista de nós disponíveis ou caixa de nós é feita pelo procedimento create_avail Os nós são obtidos de um “array” quando se utiliza a memória principal O procedimento é o mesmo em memória secundária quando os nós são obtidos seqüencialmente de um arquivo de acesso direto 6

Caixa de nós (2) getnode remove um registro da caixa de nós e o fornece ao programa freenode devolve à caixa de nós um registro que não mais esteja sendo utilizado pelo programa. a operação getnode em uma caixa de nós vazia mostra qeue a memória reservada para as estruturas de dados do programa é insuficiente Esta situação configura um transbordamento ou “overflow” 7

Caixa de nós (3) 8

Gerenciamento de espaço disponível (“available”) * ^ . . . . . Avail Alocação de um novo nó If Avail = Null then sem-espaço (a) else begin Getnode := Avail; (b) Avail := Next(Avail); (c) Next(Getnode) := Null end; * ^ . . . . . Avail Getnode . . . . . Getnode * ^ Avail . . * ^ Getnode Avail

Liberação de um nó Procedimento Freenode(Q) (a) Next(Q) := Avail (b) Info(Q) := Null (c) Avail := Q Q INFO NEXT * ^ . . . . . Avail Q NEXT * ^ . . . . . Avail

Algoritmos

FUNÇÕES QUE TRATAM DAS CAIXAS DE NÓS Implementação por ponteiros inteiros sobre um “array”   Definição de dados Constantes 12

Tipo de registro Tipo de dado t_caixa  array[0..NUMNODES - 1] de reg 13

Algoritmos Início avail  ZERO Para i variando de ZERO até NUMNODES - 2 caixa[i].next  i + 1 Fim do Para caixa[NUMNODES - 1].next  MENOS_UM Fim do procedimento 14

Método create_avail() void create_avail(void){ int i; avail = 0; for(i=0; i<numNodes-1; i++){ node[i].next = i+1; } node[numNodes-1].next = -1; 15

Método getnode() Início Se (avail = MENOS_UM) então retorne(MENOS_UM) Fim do Se p  avail avail  caixa[avail].next retorne(p) Fim do procedimento 16

Getnode (2) int getNode(void){ int p; if (avail==-1){ std::cout<<"Overflow\n"; exit(1); } p=avail; avail=node[avail].next; return p; 17

Freenode (1) Início caixa[p].next  avail avail  p retorne Fim do procedimento 18

Freenode (2) void freenode(int p) { node[p].next = avail; avail = p; return; } /* end freenode */ 19 19 19

Implementação em memória

Caixa de nós em memória

Getnode em C++ template <class T> Node<T> *GetNode(const T& item, Node<T> *nextPtr=NULL) { Node<T> *newNode; //declaração de ponteiro para nó newNode=new Node<T>(item, nextPtr); //alocação de memória // passagem de item e nextptr para o construtor // encerrar se a alocação falhar if (newNode==NULL) {cerr<<“A alocação de memória falhou"<<endl; exit(1); } return newNode;

Implementação em memória secundária

Getnode em C++ //Retorna um nó (Registro) disponível do arquivo de acesso direto Int getNode() { Bucket *header; Bucket *areaTrab; int posicao; header = new Bucket; areaTrab = new Bucket; header = &(lerBucket(0)); posicao = header->proximo; if (posicao == 0) cout << "Nao ha mais nos disponiveis"; else { //Atualiza o indicador do próximo registro disponível areaTrab = &(lerBucket(posicao)); header->proximo = areaTrab->proximo; gravarBucket(0,*header); } delete(header); delete(areaTrab); return posicao;

Freenode em C++ //Libera um registro e o coloca de volta na caixa de nós disponíveis Void freeNode(int posicao) { Bucket *header; Bucket *areaTrab; header = new Bucket; areaTrab = new Bucket; header = &(lerBucket(0)); areaTrab = &(lerBucket(posicao)); areaTrab->proximo = header->proximo; header->proximo = posicao; gravarBucket(0,*header); gravarBucket(posicao,*areaTrab); delete(header); delete(areaTrab); }

Getnode em Java (1) /* getnode * Parametros: * arq: arquivo de acesso direto da caixa de nós */ public static int getnode(RandomAccessFile arq) { Bucket header = new Bucket(); int endereco = 0; try arq.seek(0); header.read(arq); // Extrair de header o endereço do próximo registro disponível endereco = header.proximo; if (header.proximo == -1) System.out.println("Nao ha mais nos!");// - Arquivo lotado }

Getnode em Java (2) else // Ainda ha nos { Bucket areaTrabalho = new Bucket(); arq.seek(endereco*Bucket.size()); areaTrabalho.read(arq); header.proximo = areaTrabalho.proximo; arq.seek(0); header.write(arq); } catch(IOException ex) ex.printStackTrace(); finally return endereco;

Freenode em Java (1) /* Devolver a caixa de nos um bucket não mais necessário. * Parametros: * endBucket: endereço do bucket a ser liberado **/ public static void freenode(int endBucket) { Bucket areaDeTrabalho = new Bucket(); Bucket header = new Bucket(); // int proxBucketDisponivel; //endereço de bucket que pode ser alocado

Freenode em Java (2) try { arqDireto.seek(endBucket*Bucket.size()); areaDeTrabalho.read(arqDireto); arqDireto.seek(0); header.read(arqDireto); areaDeTrabalho.setProximo(header.proximo); // Susbstitui em header o valor do antigo proximo bucket disponivel // pelo endereco do bucket devolvido a caixa de nos. header.setProximo(endBucket); //Limpa o bucket devolvido a caixa de nos Cisao.Inicializar(areaDeTrabalho); //Grava o bucket devolvido a caixa de nos e o header atualizado. areaDeTrabalho.write(arqDireto); header.write(arqDireto); }

Freenode em Java (3) catch (IOException ex) { ex.printStackTrace(); }