Академический Документы
Профессиональный Документы
Культура Документы
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
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";
bc@di.fc.ul.pt
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
/*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.
/*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
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
bc@di.fc.ul.pt
10