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.

Slides:



Advertisements
Apresentações semelhantes
Listas encadeadas Prof. Rosana Palazon.
Advertisements

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.
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Implementação de FILAS com Alocação Dinâmica
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
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.
INE5408 Estruturas de Dados Ponteiros, passagem de parâmetros e modelos de memória.
INE5408 Estruturas de Dados Listas Encadeadas - Pilhas encadeadas - Filas encadeadas - Listas duplamente encadeadas.
INE5408 Estruturas de Dados Alocação Dinâmica de Memória.
Estrutura de Dados (DPADF 0056) Aula 5 – Estr. Clássicas - Fila Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Alocação Dinâmica de Memória.
Estrutura de Dados (DPADF 0056)
Estrutura de Dados (DPADF 0056) Aula 8 – Estr. Clássicas - Lista Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Algoritmos e Estruturas de Dados I – Ponteiros Profa. Mercedes Gonzales Márquez.
INE5408 Estruturas de Dados
Estruturas de Dados Aula 2: Estruturas Estáticas
Arquitetura de Computadores-S.O.
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
SISTEMAS OPERACIONAIS
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
INF1007: Programação 2 2 – Alocação Dinâmica
INE5408 Estruturas de Dados
Programação Orientada a Objetos
INE5408 Estruturas de Dados
INE5408 Estruturas de Dados
INF1007: Programação 2 5 – Tipos Estruturados
Estrutura de Dados Revisão
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
INF1007 – Programação 2 9 – Pilhas
INF1007: Programação 2 9 – Tipos Abstratos de Dados
Prof. Wellington Franco
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Estruturas de Dados Aula 5: Matrizes
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Estrutura de dados Pilhas e filas
Algoritmos e Estruturas de Dados I – Ponteiros
FUNDAMENTO DE PROGRAMAÇÃO
CONCEITO DE VARIÁVEIS ESTÁTICAS
Capítulo IV – Árvores Gerais
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
Criação e manipulação de objetos
Árvores.
Capítulo IV – Árvores Gerais
FUNDAMENTO DE PROGRAMAÇÃO PROF. WELLINGTON FRANCO
Algoritmos e Estruturas de Dados I
aritmética de ponteiros
SISTEMAS OPERACIONAIS
Programação de Computadores I – Ponteiros
Listas Encadeadas.
Fundamentos de Programação 1
Estruturas de Dados Dinâmicas
Tipos Abstratos de Dados
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Programação Orientada a Objetos
Instalação e Manutenção de Computadores Técnico em Informática MAI1
Programação de Computadores I – Ponteiros
Filas Prof. Kariston Pereira
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados em C
Estruturas definidas pelo programador
DHD – Desenvolvimento em Hardware
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Estruturas de Dados Aula 5: Matrizes 16/03/2015. Matrizes Conjuntos bidimensionais declarados estaticamente float mat[4][3]; acesso de elemento: mat[2][0]
Fundamentos de Programação 1
Transcrição da apresentação:

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 –

Encadeamento de Memória através de Ponteiros

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?

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.

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.

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

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

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)

Uma fila poderia ser implementada como uma estrutura encadeada? início final FILA

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;

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?

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

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);

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;

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;

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;

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.

Exercícios para fixação

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;