Curso de C - olimpiada.ic.unicamp.br · 25/05/2011 14:39 4 Curso C -IC/UNICAMP Conceitos: memória...

66
25/05/2011 14:39 1 Curso de C Memória Dinâmica

Transcript of Curso de C - olimpiada.ic.unicamp.br · 25/05/2011 14:39 4 Curso C -IC/UNICAMP Conceitos: memória...

  • 25/05/2011 14:39 1

    Curso de C

    Memria Dinmica

  • 25/05/2011 14:39 @Arnaldo V. Moura, Daniel F. Ferber 2

    Curso C - IC/UNICAMP

    Memria Dinmica

    Memria dinmica

    Vetores dinmicos

    Listas ligadas

    Roteiro:

    >

  • 25/05/2011 14:39 3

    Curso C - IC/UNICAMP

    Conceitos: memria dinmica e esttica

    Memria esttica:

    Variveis declaradas no cdigo

    Tamanho fixo

    Nmero limitado de variveis

    Memria esttica:

    Variveis declaradas no cdigo

    Tamanho fixo

    Nmero limitado de variveis

    Programa

    Memria esttica:int a;int b;

    >

  • 25/05/2011 14:39 4

    Curso C - IC/UNICAMP

    Conceitos: memria dinmica e esttica

    Memria esttica:

    Variveis declaradas no cdigo

    Tamanho fixo

    Nmero limitado de variveis

    Memria esttica:

    Variveis declaradas no cdigo

    Tamanho fixo

    Nmero limitado de variveis

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica: Memria dinmica:

    Espaos adicionais de memria

    Memria alocada/liberada quando

    necessrio

    Memria dinmica:

    Espaos adicionais de memria

    Memria alocada/liberada quando

    necessrio

    >

  • 25/05/2011 14:39 5

    Curso C - IC/UNICAMP

    Memria dinmica:

    Conceitos

    Solicitar memria dinmica Solicitar memria dinmica

    Passo a passo no programa:

    Programa

    Memria esttica:int a;int b;int *p;

    >

    ???

  • 25/05/2011 14:39 6

    Curso C - IC/UNICAMP

    Memria dinmica:

    Conceitos

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Passo a passo no programa:

    Programa

    Memria esttica:int a;int b;int *p;

    >

    ???

  • 25/05/2011 14:39 7

    Curso C - IC/UNICAMP

    Memria dinmica:

    Conceitos

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Armazenar dados

    Qualquer contedo

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Armazenar dados

    Qualquer contedo

    Passo a passo no programa:

    Programa

    Memria esttica:int a;int b;int *p;

    >

    xyz

  • 25/05/2011 14:39 8

    Curso C - IC/UNICAMP

    Memria dinmica:

    Conceitos

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Armazenar dados

    Qualquer contedo

    Liberar memria obtida

    Solicitar memria dinmica

    Guardar apontador para

    espao obtido

    Armazenar dados

    Qualquer contedo

    Liberar memria obtida

    Passo a passo no programa:

    Programa

    Memria esttica:int a;int b;int *p;

    >

    xyz

  • 25/05/2011 14:39 9

    Curso C - IC/UNICAMP

    Conceitos: obter memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:

    >

  • 25/05/2011 14:39 10

    Curso C - IC/UNICAMP

    Conceitos: obter memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:int *p;p = (int*)malloc(4);

    int *p;p = (int*)malloc(4);

    >

    ??

  • 25/05/2011 14:39 11

    Curso C - IC/UNICAMP

    Conceitos: obter memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Chamar funo malloc

    Parmetro: tamanho desejado, em bytes

    Resultado: apontador para espao na memria

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:int *p;p = (int*)malloc(4);*p = 5;printf("%d", *p);

    int *p;p = (int*)malloc(4);*p = 5;printf("%d", *p);

    >

    5

  • 25/05/2011 14:39 12

    Curso C - IC/UNICAMP

    Conceitos: liberar memria

    Chamar funo free:

    Parmetro: endereo j alocado

    Resultado: libera a rea alocada

    Chamar funo free:

    Parmetro: endereo j alocado

    Resultado: libera a rea alocada

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:

    int *p;p = (int*)malloc(4);*p = 5;

    int *p;p = (int*)malloc(4);*p = 5;

    >

    5

    TesteMalloc

  • 25/05/2011 14:39 13

    Curso C - IC/UNICAMP

    Conceitos: liberar memria

    Chamar funo free:

    Parmetro: endereo j alocado

    Resultado: libera a rea alocada

    Chamar funo free:

    Parmetro: endereo j alocado

    Resultado: libera a rea alocada

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:

    int *p;p = (int*)malloc(4);*p = 5;free(p);

    int *p;p = (int*)malloc(4);*p = 5;free(p);

    >

    5

    TesteMalloc

  • 25/05/2011 14:39 14

    Memria Dinmica

    Vetor dinmico

  • 25/05/2011 14:39 15

    Curso C - IC/UNICAMP

    Vetor dinmico

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    Funo sizeof:

    >

  • 25/05/2011 14:39 16

    Curso C - IC/UNICAMP

    Sada:Sada:

    Vetor dinmico

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    Funo sizeof:

    int a;printf(%d, sizeof(int));printf(%d, sizeof(a));

    int a;printf(%d, sizeof(int));printf(%d, sizeof(a));

    >

  • 25/05/2011 14:39 17

    Curso C - IC/UNICAMP

    Sada:44

    Sada:44

    Vetor dinmico

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    sizeof(variavel) Retorna quantidade de memria ocupada pela varivel

    sizeof(tipo) Retorna quantidade de memria ocupada por uma varivel com este tipo

    Funo sizeof:

    int a;printf(%d, sizeof(int));printf(%d, sizeof(a));

    int a;printf(%d, sizeof(int));printf(%d, sizeof(a));

    >

  • 25/05/2011 14:39 18

    Curso C - IC/UNICAMP

    Vetor dinmico

    Calcular tamanho do vetor com sizeof Calcular tamanho do vetor com sizeof

    Passo a passo:

    >

  • 25/05/2011 14:39 19

    Curso C - IC/UNICAMP

    Vetor dinmico

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Passo a passo:

    >

  • 25/05/2011 14:39 20

    Curso C - IC/UNICAMP

    Vetor dinmico

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Acessar elementos com [ ] ou ponteiros

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Acessar elementos com [ ] ou ponteiros

    Passo a passo:

    >

  • 25/05/2011 14:39 21

    Curso C - IC/UNICAMP

    Vetor dinmico

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Acessar elementos com [ ] ou ponteiros

    Liberar memria do vetor com free

    Calcular tamanho do vetor com sizeof

    Reservar memria com malloc

    Acessar elementos com [ ] ou ponteiros

    Liberar memria do vetor com free

    Passo a passo:

    >

  • 25/05/2011 14:39 22

    Curso C - IC/UNICAMP

    Vetor dinmico

    Exemplo:

    int *v;int tamanho;

    scanf(%d, &tamanho);v = (int*)malloc(sizeof(int)*tamanho);

    v[1] = v[2] + v[3];

    *(v+1) = *(v+2) + *(v+3);

    free(v);

    Vetor01

    >

  • 25/05/2011 14:39 23

    Curso C - IC/UNICAMP

    Conceito: alterar tamanho de memria

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:

    >

  • 25/05/2011 14:39 24

    Curso C - IC/UNICAMP

    Conceito: alterar tamanho de memria

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:int *p;p = (int*)malloc(4);...

    int *p;p = (int*)malloc(4);...

    >

  • 25/05/2011 14:39 25

    Curso C - IC/UNICAMP

    Conceito: alterar tamanho de memria

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Chamar funo realloc:

    Parmetros: apontador para espao antigo, tamanho desejado

    Resultado: apontador para novo espao

    Programa

    Memria esttica:int a;int b;int *p;

    Memria dinmica:int *p;p = (int*)malloc(4);...p = (int*)realloc(p, 8);

    int *p;p = (int*)malloc(4);...p = (int*)realloc(p, 8);

    >

  • 25/05/2011 14:39 26

    Curso C - IC/UNICAMP

    Vetor dinmico

    Exemplo:

    int *v;int tamanho, n_tamanho;

    scanf(%d, &tamanho);v=(int*)malloc(sizeof(int)*tamanho);

    scanf("%d", &n_tamanho);v=(int*)realloc(v,sizeof(int)*n_tamanho);

    free(v);Vetor02

    >

  • 25/05/2011 14:39 27

    Curso C - IC/UNICAMP

    Estrutura dinmica

    Calcular tamanho da estrutura comsizeof

    Calcular tamanho da estrutura comsizeof

    >

  • 25/05/2011 14:39 28

    Curso C - IC/UNICAMP

    Estrutura dinmica

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    >

  • 25/05/2011 14:39 29

    Curso C - IC/UNICAMP

    Estrutura dinmica

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    Acessar membros da estrutura com ->

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    Acessar membros da estrutura com ->

    >

  • 25/05/2011 14:39 30

    Curso C - IC/UNICAMP

    Estrutura dinmica

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    Acessar membros da estrutura com ->

    Liberar memria da estrutura com free

    Calcular tamanho da estrutura comsizeof

    Reservar memria com malloc

    Acessar membros da estrutura com ->

    Liberar memria da estrutura com free

    >

  • 25/05/2011 14:39 31

    Curso C - IC/UNICAMP

    Estrutura dinmica

    struct complexo {float real;float imaginario;

    }

    struct complexo *numero;

    numero = (struct complexo *)malloc(sizeof(struct complexo));

    numero->real = 10.0;numero->imaginario = 5.0;

    free(numero);

    >

    NumComlexo

  • 25/05/2011 14:39 32

    Apontadores

    Listas Ligadas

  • 25/05/2011 14:39 33

    Curso C - IC/UNICAMP

    Vetor:

    Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Vetor:

    Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Listas Ligadas

    Idia principal :

    >

  • 25/05/2011 14:39 34

    Curso C - IC/UNICAMP

    Vetor: Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Lista ligada: Cada elemento em posio de memria separada

    Posies desordenadas e no consecutivas

    Vetor: Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Lista ligada: Cada elemento em posio de memria separada

    Posies desordenadas e no consecutivas

    Listas Ligadas

    Idia principal :

    dados dados dados

    >

  • 25/05/2011 14:39 35

    Curso C - IC/UNICAMP

    Vetor:

    Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Lista ligada:

    Cada elemento em posio de memria separada

    Posies desordenadas e no consecutivas

    Apontadores para indicar seqncia correta

    Vetor:

    Um nico grande bloco de memria

    Elementos consecutivos adjacentes

    Lista ligada:

    Cada elemento em posio de memria separada

    Posies desordenadas e no consecutivas

    Apontadores para indicar seqncia correta

    Listas Ligadas

    Idia principal :

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 36

    Curso C - IC/UNICAMP

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    Listas Ligadas: declarao

    Nome da estrutura

    >

  • 25/05/2011 14:39 37

    Curso C - IC/UNICAMP

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    Listas Ligadas: declarao

    Nome da estrutura

    Apontador para prximo

    elemento na seqncia

    >

  • 25/05/2011 14:39 38

    Curso C - IC/UNICAMP

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    struct elemento {

    int valor;

    struct elemento *prox;

    }

    Listas Ligadas: declarao

    Nome da estrutura

    Apontador para prximo

    elemento na seqncia

    inicio_lista

    >

    dados

    valor prox

    dados

    valor prox

    NULLdados

    valor prox

  • 25/05/2011 14:39 39

    Curso C - IC/UNICAMP

    Listas Ligadas: percorrer

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 40

    Curso C - IC/UNICAMP

    Listas Ligadas: percorrer

    struct elemento *atual;atual = inicio_lista;

    while (atual != null) {

    }

    printf( ...,atual->valor);

    atual = atual->proximo;

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 41

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir em lista vazia

    inicio_lista NULL

    >

    NULL

  • 25/05/2011 14:39 42

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo=(. . . *)malloc(sizeof(. . .));

    Listas Ligadas: inserir em lista vazia

    novo

    inicio_lista NULL

    >

  • 25/05/2011 14:39 43

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;

    Listas Ligadas: inserir em lista vazia

    novo

    inicio_lista NULL

    >

    dados NULL

    NULL

  • 25/05/2011 14:39 44

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;inicio_lista = novo;

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;inicio_lista = novo;

    Listas Ligadas: inserir em lista vazia

    novo

    inicio_lista NULL

    >

    dados NULL

  • 25/05/2011 14:39 45

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo=(. . . *)malloc(sizeof(. . .));

    Listas Ligadas: inserir no incio, no vazia

    novo

    inicio_listainicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 46

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    Listas Ligadas: inserir no incio, no vazia

    novo

    inicio_listainicio_lista dados dados NULLdados

    >

    dados

  • 25/05/2011 14:39 47

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = inicio_lista;

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = inicio_lista;

    Listas Ligadas: inserir no incio, no vazia

    novo

    inicio_listainicio_lista dados dados NULLdados

    >

    dados

  • 25/05/2011 14:39 48

    Curso C - IC/UNICAMP

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = inicio_lista;inicio_lista = novo;

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = inicio_lista;inicio_lista = novo;

    Listas Ligadas: inserir no incio, no vazia

    novo

    inicio_listainicio_lista dados dados NULLdados

    >

    dados

  • 25/05/2011 14:39 49

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no fim

    inicio_lista dados dados NULLdados

    struct elemento *ultimo;ultimo = inicio_lista;

    >

    ultimo

    NULL

  • 25/05/2011 14:39 50

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no fim

    inicio_lista dados dados NULLdados

    struct elemento *ultimo;ultimo = inicio_lista;while (ultimo->proximo != null) {

    ultimo = ultimo->proximo; }

    >

    ultimo

    NULL

  • 25/05/2011 14:39 51

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no fim

    novo

    inicio_lista dados dados NULLdados

    struct elemento *ultimo;ultimo = inicio_lista;while (ultimo->proximo != null) {

    ultimo = ultimo->proximo; }

    novo=(. . . *)malloc(sizeof(. . .));

    >

    ultimo

    NULL

  • 25/05/2011 14:39 52

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no fim

    novo

    inicio_lista dados dados NULLdados

    struct elemento *ultimo;ultimo = inicio_lista;while (ultimo->proximo != null) {

    ultimo = ultimo->proximo; }

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;

    >

    ultimo

    dados NULL

    NULL

  • 25/05/2011 14:39 53

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no fim

    novo

    inicio_lista dados dados NULLdados

    struct elemento *ultimo;ultimo = inicio_lista;while (ultimo->proximo != null) {

    ultimo = ultimo->proximo; }

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;novo->proximo = NULL;ultimo->proximo = novo;

    >

    ultimo

    dados NULL

  • 25/05/2011 14:39 54

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no meio (ordenado)

    inicio_listainicio_lista dados dados NULLdadosdados

    >

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    novo dados

    anterior

  • 25/05/2011 14:39 55

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no meio (ordenado)

    inicio_listainicio_lista dados dados NULLdadosdados

    >

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    // ordenada por valorstruct elemento *anterior; anterior = inicio_lista;

    novo dados

    anterioranterior

  • 25/05/2011 14:39 56

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no meio (ordenado)

    while ((anterior-> proximo != NULL) && (anterior->proximo->valor < novo->valor)) {anterior = anterior->proximo;}

    inicio_listainicio_lista dados dados NULLdadosdados

    anterior

    >

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    // ordenada por valorstruct elemento *anterior; anterior = inicio_lista;

    novo dados

    anterior

  • 25/05/2011 14:39 57

    Curso C - IC/UNICAMP

    Listas Ligadas: inserir no meio (ordenado)

    while ((anterior-> proximo != NULL) && (anterior->proximo->valor < novo->valor)) {anterior = anterior->proximo;}

    novo->proximo = anterior->proximo;anterior->proximo = novo;

    inicio_listainicio_lista dados dados NULLdadosdados

    anterior

    >

    novo=(. . . *)malloc(sizeof(. . .));novo->valor = . . . ;

    // ordenada por valorstruct elemento *anterior; anterior = inicio_lista;

    novo dados NULL

    anterior

  • 25/05/2011 14:39 58

    Curso C - IC/UNICAMP

    Listas Ligadas: remover do inicio (no vazia)

    alvo

    >

    alvo = inicio_lista;

    inicio_lista dados dados NULLdados

  • 25/05/2011 14:39 59

    Curso C - IC/UNICAMP

    Listas Ligadas: remover do inicio (no vazia)

    alvo

    >

    alvo = inicio_lista;inicio_lista = inicio_lista->proximo;// ou: inicio_lista = alvo->proximo;

    inicio_lista dados dados NULLdados

  • 25/05/2011 14:39 60

    Curso C - IC/UNICAMP

    Listas Ligadas: remover do inicio (no vazia)

    alvo

    >

    free(alvo);

    alvo = inicio_lista;inicio_lista = inicio_lista->proximo;// ou: inicio_lista = alvo->proximo;

    inicio_lista dados dados NULLdados

  • 25/05/2011 14:39 61

    Curso C - IC/UNICAMP

    Listas Ligadas: remover no meio ou fim

    inicio_lista dados dados NULLdados

    alvoanterior

    >

    // anterior aponta para o elemento// imediatamente antes de alvo

  • 25/05/2011 14:39 62

    Curso C - IC/UNICAMP

    Listas Ligadas: remover no meio ou fim

    inicio_lista dados dados NULLdados

    alvoanterior

    >

    // anterior aponta para o elemento// imediatamente antes de alvo

    anterior->proximo = alvo->proximo;

  • 25/05/2011 14:39 63

    Curso C - IC/UNICAMP

    Listas Ligadas: remover no meio ou fim

    inicio_lista dados dados NULLdados

    alvoanterior

    >

    // anterior aponta para o elemento// imediatamente antes de alvo

    anterior->proximo = alvo->proximo;

    free(alvo);

  • 25/05/2011 14:39 64

    Curso C - IC/UNICAMP

    Vantagens: Fcil aumento/diminuio no tamanho da lista

    Reserva memria exatamente sob medida

    Permite mais de um critrio de ordenao

    Vantagens: Fcil aumento/diminuio no tamanho da lista

    Reserva memria exatamente sob medida

    Permite mais de um critrio de ordenao

    Listas Ligadas

    Vantagens/Desvantagens:

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 65

    Curso C - IC/UNICAMP

    Vantagens:

    Fcil aumento/diminuio no tamanho da lista

    Reserva memria exatamente sob medida

    Permite mais de um critrio de ordenao

    Desvantagens:

    Para cada elemento, armazena um apontador

    No possvel acessar diretamente um elemento

    Vantagens:

    Fcil aumento/diminuio no tamanho da lista

    Reserva memria exatamente sob medida

    Permite mais de um critrio de ordenao

    Desvantagens:

    Para cada elemento, armazena um apontador

    No possvel acessar diretamente um elemento

    Listas Ligadas

    Vantagens/Desvantagens:

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 66

    Memria Dinmica

    Vetor2Lista

    Vetor2ListaRec

    ConcatListas

    ConcatListasRec

    InverteLista

    InverteListaRec

    InverteListaNaMemoria

    Vetor2ListaOrd

    Vetor2ListaOrdRec

    OperaListasRec

    OperaComFilas

    Lista2ListaDupla

    Express2Arvore

    DicionarioBinario