A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Apresentações semelhantes


Apresentação em tema: "ALOCAÇÃO DINÂMICA DE MEMÓRIA"— Transcrição da apresentação:

1 ALOCAÇÃO DINÂMICA DE MEMÓRIA
PASCAL ALOCAÇÃO DINÂMICA DE MEMÓRIA

2 Alocação Estática de Memória
Definimos exatamente as variáveis necessárias para resolver um problema Usada quando conhecemos a quantidade e a dimensão das variáveis necessárias Ex.: Var Nr1, nr2, nr3: integer; // variáveis tipo inteiro Temperaturas: array[1..24] of integer; // variável estruturada homogênea do tipo inteiro com uma dimensão e 24 elementos

3 Alocação Dinâmica de Memória
Permite criar variáveis dinamicamente, em tempo de execução, a medida em que forem necessárias Usada quando não sabemos a quantidade ou a dimensão das variáveis que necessitamos para resolver um problema Em Pascal, C e C++ a alocação dinâmica de memória é implementada via pointer

4 Pointer Um pointer é uma variável que aponta para uma outra variável, esta última criada em tempo de execução Isto permite definir, durante a execução de um programa, quantas variáveis de um tipo de pointer serão criadas, e a dimensão dessas variáveis O pointer tem um tipo: ele só pode apontar para variáveis de seu tipo Pode-se imaginar o pointer como contendo um endereço de uma variável

5 Exemplo de alocação estática
Var Nr1, nr2, nr3: integer; nr1 Todas do tipo inteiro nr2 nr3

6 Exemplo de alocação dinâmica
Var Var1, var2: ^integer var1 Podem apontar para variáveis do tipo inteiro var2

7 nr1, nr2: inteiro // variável estática Var1, var2: ^inteiro // pointer
Begin nr1 nr2 var1 var2 nr1  nr2  nr new (var1) var1^  25 nr2  var1^ 25

8 Lista encadeada por pointer
início Encadeamento

9 Exemplo: agenda por pointer
Algoritmo agendaPointer (* agenda em pointer com inclusão no início *) Tipo tcontato = ^rcontato (* pointer *) Rcontato = registro nome fone proximo: tcontato (* recursão *) fim Var Primeiro, novo, atual, ultimo: tcontato

10 Primeiro  nil // para inicializar com nulo
Inicio Primeiro  nil // para inicializar com nulo // repetição e menu com opções Procedimento incluirContatoInicio (* procedimento para incluir contato no inicio *) inicio New (novo) // alocação dinâmica de memória Leia (novo^.nome, novo^.fone) (* orientar e testar *) Novo^.proximo  nil Se primeiro = nil Então primeiro  novo // primeira inclusão Senão // demais inclusões Novo^.proximo  primeiro Primeiro  novo fim

11 Exemplo de agenda Primeiro contato: zé fone 45
Segundo contato: rui fone 80 Terceiro contato: lui fone 10 primeiro Ze 45 primeiro Rui 80 Ze 45 primeiro Lui 10 Rui 80 Ze 45

12 Procedimento listarContatos (* procedimento para listar os contatos *)
Inicio Atual  primeiro Enquanto atual <> nil faça Escreva(atual^.nome, atual^.fone) Atual  atual^.proximo fim

13 procedimento incluirContatoFim
(* procedimento para incluir contato no fim – inclusão mantendo a ordem cronológica *) new (novo) // alocação dinâmica de memória leia (novo^.nome, novo^.fone) // orientar e testar novo^.proximo  nil se primeiro = nil então primeiro  novo // primeira inclusão Ultimo  novo senão // demais inclusões ultimo^.proximo  novo ultimo  novo fim

14 Exemplo de agenda Primeiro contato: zé fone 45
Segundo contato: rui fone 80 Terceiro contato: lui fone 10 ultimo primeiro Ze 45 ultimo primeiro Ze 45 Rui 80 ultimo primeiro Ze 45 Rui 80 Lui 10

15 Novo exemplo linear Agenda que permita manter os nomes e telefones de contatos em ordem alfabética em uma lista circular O contato atual deve ser apresentado na tela Opções: Incluir novo contato – este passa a ser o atual Excluir o contato atual – atual será o próximo Alterar o telefone do contato atual Apresentar o próximo – será o atual Apresentar o anterior – será o atual Consultar um contato pelo nome - será o atual Listar todos os contatos – mantido o atual

16 Exemplo não linear Agenda que permita manter os nomes e telefones de contatos em ordem alfabética em uma árvore binária Opções: Incluir novo contato Alterar o telefone de um contato Consultar um contato pelo nome Listar todos os contatos em ordem alfabética


Carregar ppt "ALOCAÇÃO DINÂMICA DE MEMÓRIA"

Apresentações semelhantes


Anúncios Google