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
Estruturas Encadeadas

2 Motivação O uso de estruturas encadeadas dinamicamente permite criar estruturas de dados versáteis que permitem

3 Conceitos Estrutura auto-referenciada
Um estrutura auto referência possui dentro seus campos, um campo que pode referenciar estruturas idênticas a ela mesma. Portanto, uma estrutura auto referenciada pode apontar para outra estrutura do mesmo tipo que ela

4 Implementando um estrutura auto-referenciada
Exemplo: struct Ponto { int x,y; int cor; struct Ponto *proximoPonto; }; x y proximoPonto cor

5 Implementando um estrutura auto-referenciada
main(){ /*declarando uma lista de struct Ponto */ struct Ponto *lPontos, aux; // lista de pontos lPontos e aux lPontos ? /* alocando um struct Ponto a atribuindo o seu endereço ao inicio da lista */ lPontos = malloc(struct Ponto); x lPontos y proximoPonto ? cor

6 Implementando um estrutura auto-referenciada
/*Atribuindo os valores do Ponto*/ lPontos->x = 3; lPontos->y = 5; lPontos->cor = 245; /* Atribuindo NULL ao proximo ponto */ lPontos->proximoPonto = NULL; x 3 proximoPonto lPontos y 5 NULL cor 245

7 Adicionando um novo ponto a lista
Alternativa 1 – Inserindo no início da lista de pontos aux = lPontos; lPontos = malloc (struct lPontos); lPontos->x = 20; lPontos->y = 30; lPontos->cor = 135; lPontos->proximoPonto = aux; lPontos x 20 x 3 proximoPonto proximoPonto y 30 y 5 NULL cor 135 cor 245

8 Adicionando um novo ponto a lista
Alternativa 2 – Inserindo no início da lista de pontos aux = malloc (struct lPontos); aux->x = 20; aux->y = 30; aux->cor = 135; aux->proximoPonto = NULL; lPontos->proximoPonto = aux; lPontos x 3 x 20 proximoPonto proximoPonto y 5 y 30 NULL cor 245 cor 135

9 Removendo um ponto Exemplos: remover o primeiro ponto da lista:
aux = lPontos->proximoPonto; free(lPontos); lPontos = aux; remover o segundo ponto da lista: free(lPontos->proximoPonto); lPontos->proximoPonto=NULL;

10 Redefinindo a struct Ponto
typedef struct Ponto{ int x,y,cor; } Ponto; typedef struct noLista { Ponto p; struct noLista *prox; }noLista; typedef *noLista Lista;

11 Generalizando as funções de inserção e remoção
int inserePonto(Lista *l, Ponto p); int removePonto(Lista *l, int x, int y);


Carregar ppt "Alocação Dinâmica de Memória"

Apresentações semelhantes


Anúncios Google