Sumário Armazenamento de dados Vectores Vectores dinâmicos Dados dinamicos Tipos de dados dinâmicos Declaração Uso Exemplos 10-1
Armazenamento de dados Tamanho conhecido antes compilação Vectores BI vect[200] Tamanho conhecido durante a execução Vectores dinâmicos BI * vect; Vect = (BI *) calloc (n, sizeof(bi)) 10-2
Armazenamento de dados E se comprimento variar? E se quisermos inserir ordenado? E se quisermos remover? E se o vector estiver cheio? Complexo com vectores dinâmicos Solução 10-3
Números positivos ordenados 0 0 0 0 0 0 0 0 0 0 Inserir 10 10-4
Números positivos ordenados 10 0 0 0 0 0 0 0 0 0 Inserir 12 10-5
Números positivos ordenados 10 12 0 0 0 0 0 0 0 0 Inserir 5 10-6
Números positivos ordenados 10 0 12 0 0 0 0 0 0 0 Inserir 5 10-7
Números positivos ordenados 0 10 12 0 0 0 0 0 0 0 Inserir 5 10-8
Números positivos ordenados 5 10 12 0 0 0 0 0 0 0 Inserir 11 10-9
Números positivos ordenados 5 10 0 12 0 0 0 0 0 0 Inserir 11 10-10
Números positivos ordenados 5 10 11 12 0 0 0 0 0 0 10-11
Números positivos ordenados 3 5 7 8 10 11 12 14 25 37 E se estiver cheio? Se criado com calloc Redimensionamento do vector Senão 10-12
Memória Dinâmica Variáveis locais Existentes apenas dentro de uma função Acessíveis a partir dessa função Memória dinâmica Dados existem Entre criação e destruição Acessíveis por várias funções Evita sobredimensão dos vectores 10-13
sizeof Retorna o número de bytes ocupados por uma variável dum tipo sizeof(char) 1 sizeof(int) 4 sizeof(char *) 4 sizeof(int *) 4 sizeof(bi *) 4 sizeof(bi) muitos 10-14
Números positivos ordenados base 10 novo Inserir 10 10-15
Números positivos ordenados aux base 10 12 novo Inserir 12 10-16
Números positivos ordenados aux base 10 12 novo 5 Inserir 5 10-17
Números positivos ordenados aux base 10 12 novo 5 Inserir 11 11 10-18
Números positivos ordenados aux base 10 12 novo 5 Fim 11 10-19
Declaração O tipo (estrutura) inclui Campo com os dados Campo com referência para outra estrutura (do mesmo tipo) struct dim_st{ } tipodados x; struct dim_st *seg; typedef struct dim_st dinamic; typedef struct dim_st{ tipodados x; struct dim_st *seg; }dinamic; 10-20
Declaração Declaração inválida linha 3: ainda não sabemos o que é dinamic 1. typedef struct dim_st{ 2. tipodados x; 3. dinamic *seg; 4. }dinamic; 10-21
Criação Uma caixinha para cada valor Função malloc Semelhante ao calloc Mas só cria uma estrutura Novo = (tipo *) malloc (sizeof(tipo)); Pode retornar NULL se houver erro if (Novo == NULL) 10-22
Pilha Fila Lista 6 23 67 99 NULL Qual a diferença? Estrutura (typedef): nenhuma :) Funções (código): quase toda 10-23
/abstractos Operações Cria_nova Insere Remove Procura (só a lista) Cimo (só pilha) Primeiro (só fila) 10-24
Decisões O que é uma XXXX vazia Onde termina uma XXXX terminador Qual a ordem das setas Como se insere No início? No fim? No meio? Ordenado crescente Ordenado decrescente 10-25
Pilha Usos Arrumar coisas :) Calculador RPN Inverter ordem de coisas Operação Inserir No cimo Retirar O último a entrar 10-26
Pilha Inserir Inserir(p1, 12) Onde? p1 6 6 6 6 NULL 12 12?? 10-27
Fila Inserir Inserir(p1, 12) Onde? p1 6 6 6 6 NULL 12 12?? 10-28
Lista Inserir Inserir(p1, 12) Onde? p1 8 10 16 17 NULL 4 12?? 10-29
Gestão de memória Os blocos criados (calloc ou malloc) Devem ser sempre acessíveis Se não acessíveis são lixo Devem ser destruídos com o free char * ptr; ptr = (char *) malloc(sizeof(char));... free(ptr); 10-30