Вы находитесь на странице: 1из 3

Programao II

2011/2012
Beatriz Carmo DI-FCUL Engenharia Geogrfica Estatstica Aplicada Outros
bc@di.fc.ul.pt GU-ProgII-OL-12-5 estruturas dinmicas 1

Estruturas de Dados: Estticas Semi-estticas Dinmicas Exemplo: Implementao de uma lista de alunos, considerando a seguinte declarao para aluno struct aluno { int numero; char nome[40]; };
bc@di.fc.ul.pt GU-ProgII-OL-12-5 estruturas dinmicas 2

Estrutura de Dados Esttica


1500 Jose 1600 Maria

Obs: Se o campo nome for declarado como char nome[40]; ou char nome[ ]; Faz-se a atribuio do seguinte modo strcpy(alunoTP1[0].nome,"Jose");

/*declarao da lista */ struct aluno alunosTP1[30]; /*insero de elementos*/ alunoTP1[0].numero=1500; strcpy(alunoTP1[0].nome,"Jose"); alunoTP1[1].numero=1600; strcpy(alunoTP1[1].nome,Maria");
bc@di.fc.ul.pt

A dimenso da varivel alunosTP1 esttica, i e, a dimenso da estrutura que guarda os elementos da lista no muda.

Se o campo nome for declarado como char *nome; Faz-se a atribuio do seguinte modo alunoTP1[0].nome="Jose";

GU-ProgII-OL-12-5 estruturas dinmicas

bc@di.fc.ul.pt

GU-ProgII-OL-12-5 estruturas dinmicas

Estrutura de Dados Semi-Esttica

Estrutura de Dados Dinmica

1500 Jose

1600 Maria

A dimenso da varivel alunosTP2 esttica, mas o espao de memria para os elementos da lista reservado medida que so inseridos na lista.

cabeca

elem prox

1500 Jose

1600 Maria

/*declarao*/ struct aluno *alunoTP2[30]; /*insero de elementos*/ alunoTP2[0]= (struct aluno *) malloc( sizeof (struct aluno)); alunoTP2[0]->numero=1500; strcpy(alunoTP2[0].nome,"Jose");
bc@di.fc.ul.pt GU-ProgII-OL-12-5 estruturas dinmicas 5 bc@di.fc.ul.pt

no

GU-ProgII-OL-12-5 estruturas dinmicas

/*declaraes*/ typedef struct no *NoPtr; struct no { struct aluno elem; NoPtr prox; }; struct lista{ NoPtr cabeca; }; typedef struct lista *Lista; Lista alunosTP3; A dimenso mxima da lista no fixada com a declarao da varivel lista.

Funes para reserva ou libertao de memria


#include <stdlib.h> /*definidas na biblioteca <stdlib.h>*/ void *malloc (size_t sz) Reserva sz bytes de memria e devolve o endereo do incio desse espao de memria, ie, devolve um apontador para a memria reservada. Devolve NULL se no conseguir reservar memria. conveniente converter, atravs do mecanismo de casting, o tipo void* para o tipo adequado. Em
alunosTP3=(Lista) malloc (sizeof(Lista));

/*insero de um elemento*/ alunosTP3=(Lista) malloc (sizeof(Lista)); alunosTP3->cabeca=(NoPtr) malloc(sizeof(struct no)); alunosTP3->cabeca->elem.numero=1500; strcpy(alunosTP3->cabeca->elem.nome,"Jose");
bc@di.fc.ul.pt GU-ProgII-OL-12-5 estruturas dinmicas 7

feito um cast para Lista.


bc@di.fc.ul.pt GU-ProgII-OL-12-5 estruturas dinmicas 8

void *calloc (size_t n_elem, size_t sz) Reserva memoria para um vector de n_elem posies, cada uma ocupando sz bytes. Para alm disso,esta funo inicializa os elementos do vector com o valor nulo (algo que o malloc no faz)

Bibliografia
Estruturas de Dados e Algoritmos em C Antnio Adrego da Rocha, FCA, 2008 Slides de Programao II 08/09, Prof. Carlos Loureno

void free (void *ptr) Liberta o espao de memria apontado por ptr. Se ptr for NULL, no faz nada. O apontador deve apontar para espao reservado com calloc ou malloc.

bc@di.fc.ul.pt

GU-ProgII-OL-12-5 estruturas dinmicas

bc@di.fc.ul.pt

GU-ProgII-OL-12-5 estruturas dinmicas

10

Вам также может понравиться