Carregar apresentação
A apresentação está carregando. Por favor, espere
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);
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.