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

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

Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.

Apresentações semelhantes


Apresentação em tema: "Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior."— Transcrição da apresentação:

1 Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno

2 Encadeamento de Memória através de Ponteiros

3 Alocação estática x dinâmica #define MAX 100 typedef struct fila { int comeco; int final; int vetor[MAX]; } Fila; Como poderia fazer para ter uma fila com mais de 100 posições?

4 Alocação estática x dinâmica Alocação estática ocorre em tempo de compilação. Quando o programa entra em execução ele “reserva” toda a memória necessária para sua execução; Alocação dinâmica ocorre em tempo de execução, não há reserva de memória na inicialização do programa. ▫ Quando há necessidade, a memória é alocada e posteriormente liberada.

5 Estruturas encadeadas São estruturas dinâmicas (a memória necessária é alocada durante a execução do programa); Devem ser utilizadas quando a organização física não necessariamente coincide com a organização lógica; No estudo das estruturas “pilhas” e “filas” a organização física contínua favorece a organização lógica, mas não é a única alternativa.

6 Estruturas encadeadas Como funciona? ▫ É necessário definir um tipo estruturado com um “campo” ou atributo para fazer a ligação entre elementos de mesmo tipo

7 Estruturas encadeadas Cada elemento de uma estrutura encadeada tem dois blocos: Área de Informações Área de Apontadores ou Elos Elemento a b c f e d

8 Estruturas encadeadas struct elemento { int valor; struct elemento* proximo } Como representar um encadeamento? Solução: PONTEIROS! (a estrutura contém um apontador para ela própria)

9 Uma fila poderia ser implementada como uma estrutura encadeada? 34 56 67 9 12 14 início final FILA

10 Etapa 1 – Definição Conceitual typedef struct elemento { int valor; struct elemento* proximo; } Elemento; //Definição da fila //Dois apontadores: início e final typedef struct fila { Elemento* inicio; Elemento* final; } Fila;

11 Etapa 2 – Definição das Operações Fila* criaFila(); void liberaFila(Fila* p); int inserir(Fila* p, int v); int retirar(Fila* p, int* v); int estahVazia(Fila* p); int estahCheia(Fila* p); As operações são exatamente as mesmas?

12 Funcionamento f = criaFila(); inserir(f, 34); inserir(f, 56); inserir(f, 67); int a; retirar(f, &a); liberaFila(); início final f NULL 34 NULL 56 NULL 67 NULL a 3434

13 Fila* criaFila(); Aloca memória para a estrutura física; Inicializa os controles de início e o fim da fila; Retorna um ponteiro para a estrutura criada; void liberaFila(Fila* p); Recebe um ponteiro para uma estrutura do tipo fila e libera a memória ocupada por ela (será necessário percorrer todos os elementos da fila para liberar individualmente seus elementos);

14 int estahVazia(Fila* p); O que caracteriza uma fila vazia? ▫ O início e o fim da fila não apontam para nenhum elemento; int estahCheia(Fila* p); O que caracteriza uma fila cheia? ▫ Com alocação dinâmica a única chance da fila ficar cheia é se ela ocupar toda a memória do computador;

15 int inserir(Fila* p, int v); Recebe um ponteiro para uma estrutura do tipo fila e um valor a ser enfileirado; Cria um novo elemento atribuindo o valor de “v”; Se houve sucesso (há espaço para o novo elemento) ▫ O apontador do elemento apontado pelo fim da fila passa a apontar para o novo elemento; ▫ O apontador do fim da fila aponta para o novo elemento; Se o apontador de início é NULL então ele também aponta para o novo elemento;

16 int retirar(Fila* p, int* v); Recebe um ponteiro para uma estrutura do tipo fila e um ponteiro para uma variável inteira; Verifica se a fila já não está vazia; Se não está, então... ▫ Guarda o valor do elemento apontado pelo início da fila no endereço da variável “v”; ▫ O apontador de início da fila passa a apontar para o elemento que atualmente o elemento apontado pelo início da fila aponta; ▫ O elemento que era apontado pelo início da fila é destruído;

17 Etapa 3 – Implementação e Utilização a = criaFila(); inserir(a,10); inserir(a,20); inserir(a,30); int x; retirar(a, &x); printf("Elemento '%d' retirado",x); liberaFila(a); Mas isso é exatamente como já fizemos antes? A construção de um TAD abstrai do usuário final a forma como o mesmo foi implementado. Basta conhecer a interface do TAD para utilizá-lo.

18 Exercícios para fixação

19 Encadeamento de memória Que tal re-implementar o TAD “Pilha” utilizando- se de encadeamento de memória? ▫ Basta um apontador para indicar o topo da pilha; ▫ O mesmo “Elemento” utilizado no exemplo da fila pode ser reaproveitado;


Carregar ppt "Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior."

Apresentações semelhantes


Anúncios Google