curso de cwainer/cursos/2s2011/cap15-memoriadi… · 25/05/2011 14:39 @arnaldo v. moura, daniel f....

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

Upload: others

Post on 10-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

  • 25/05/2011 14:39 1

    Curso de C

    Memória Dinâmica

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

    Curso C - IC/UNICAMP

    Memória Dinâmica

    • Memória dinâmica

    • Vetores dinâmicos

    • Listas ligadas

    Roteiro:

    >

  • 25/05/2011 14:39 3

    Curso C - IC/UNICAMP

    Conceitos: memória dinâmica e estática

    • Memória estática:

    – Variáveis declaradas no código

    – Tamanho fixo

    – Número limitado de variáveis

    • Memória estática:

    – Variáveis declaradas no código

    – Tamanho fixo

    – Número limitado de variáveis

    Programa

    Memória estática:int a;int b;

    >

  • 25/05/2011 14:39 4

    Curso C - IC/UNICAMP

    Conceitos: memória dinâmica e estática

    • Memória estática:

    – Variáveis declaradas no código

    – Tamanho fixo

    – Número limitado de variáveis

    • Memória estática:

    – Variáveis declaradas no código

    – Tamanho fixo

    – Número limitado de variáveis

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:• Memória dinâmica:

    – Espaços adicionais de memória

    – Memória alocada/liberada quando

    necessário

    • Memória dinâmica:

    – Espaços adicionais de memória

    – Memória alocada/liberada quando

    necessário

    >

  • 25/05/2011 14:39 5

    Curso C - IC/UNICAMP

    Memória dinâmica:

    Conceitos

    • Solicitar memória dinâmica• Solicitar memória dinâmica

    Passo a passo no programa:

    Programa

    Memória estática:int a;int b;int *p;

    >

    ???

  • 25/05/2011 14:39 6

    Curso C - IC/UNICAMP

    Memória dinâmica:

    Conceitos

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    Passo a passo no programa:

    Programa

    Memória estática:int a;int b;int *p;

    >

    ???

  • 25/05/2011 14:39 7

    Curso C - IC/UNICAMP

    Memória dinâmica:

    Conceitos

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    • Armazenar dados

    – Qualquer conteúdo

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    • Armazenar dados

    – Qualquer conteúdo

    Passo a passo no programa:

    Programa

    Memória estática:int a;int b;int *p;

    >

    xyz

  • 25/05/2011 14:39 8

    Curso C - IC/UNICAMP

    Memória dinâmica:

    Conceitos

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    • Armazenar dados

    – Qualquer conteúdo

    • Liberar memória obtida

    • Solicitar memória dinâmica

    • Guardar apontador para

    espaço obtido

    • Armazenar dados

    – Qualquer conteúdo

    • Liberar memória obtida

    Passo a passo no programa:

    Programa

    Memória estática:int a;int b;int *p;

    >

    xyz

  • 25/05/2011 14:39 9

    Curso C - IC/UNICAMP

    Conceitos: obter memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:

    >

  • 25/05/2011 14:39 10

    Curso C - IC/UNICAMP

    Conceitos: obter memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:int *p;p = (int*)malloc(4);

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

    >

    ??

  • 25/05/2011 14:39 11

    Curso C - IC/UNICAMP

    Conceitos: obter memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Chamar função malloc

    – Parâmetro: tamanho desejado, em bytes

    – Resultado: apontador para espaço na memória

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica: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 memória

    Chamar função free :

    – Parâmetro: endereço já alocado

    – Resultado: libera a área alocada

    Chamar função free :

    – Parâmetro: endereço já alocado

    – Resultado: libera a área alocada

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:

    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 memória

    Chamar função free :

    – Parâmetro: endereço já alocado

    – Resultado: libera a área alocada

    Chamar função free :

    – Parâmetro: endereço já alocado

    – Resultado: libera a área alocada

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:

    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

    Memória Dinâmica

    Vetor dinâmico

  • 25/05/2011 14:39 15

    Curso C - IC/UNICAMP

    Vetor dinâmico

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    Função sizeof :

    >

  • 25/05/2011 14:39 16

    Curso C - IC/UNICAMP

    Saída:Saída:

    Vetor dinâmico

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    Função 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

    Saída:44

    Saída:44

    Vetor dinâmico

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    sizeof(variavel)– Retorna quantidade de memória ocupada pela variável

    sizeof(tipo)– Retorna quantidade de memória ocupada por uma variável com este tipo

    Função 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 dinâmico

    • 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 dinâmico

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    Passo a passo:

    >

  • 25/05/2011 14:39 20

    Curso C - IC/UNICAMP

    Vetor dinâmico

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    • Acessar elementos com [ ] ou ponteiros

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    • Acessar elementos com [ ] ou ponteiros

    Passo a passo:

    >

  • 25/05/2011 14:39 21

    Curso C - IC/UNICAMP

    Vetor dinâmico

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    • Acessar elementos com [ ] ou ponteiros

    • Liberar memória do vetor com free

    • Calcular tamanho do vetor com sizeof

    • Reservar memória com malloc

    • Acessar elementos com [ ] ou ponteiros

    • Liberar memória do vetor com free

    Passo a passo:

    >

  • 25/05/2011 14:39 22

    Curso C - IC/UNICAMP

    Vetor dinâmico

    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 memória

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica:

    >

  • 25/05/2011 14:39 24

    Curso C - IC/UNICAMP

    Conceito: alterar tamanho de memória

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica: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 memória

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Chamar função realloc :

    – Parâmetros: apontador para espaço antigo, tamanho desejado

    – Resultado: apontador para novo espaço

    Programa

    Memória estática:int a;int b;int *p;

    Memória dinâmica: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 dinâmico

    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 dinâmica

    • Calcular tamanho da estrutura comsizeof

    • Calcular tamanho da estrutura comsizeof

    >

  • 25/05/2011 14:39 28

    Curso C - IC/UNICAMP

    Estrutura dinâmica

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    >

  • 25/05/2011 14:39 29

    Curso C - IC/UNICAMP

    Estrutura dinâmica

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    • Acessar membros da estrutura com ->

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    • Acessar membros da estrutura com ->

    >

  • 25/05/2011 14:39 30

    Curso C - IC/UNICAMP

    Estrutura dinâmica

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    • Acessar membros da estrutura com ->

    • Liberar memória da estrutura com free

    • Calcular tamanho da estrutura comsizeof

    • Reservar memória com malloc

    • Acessar membros da estrutura com ->

    • Liberar memória da estrutura com free

    >

  • 25/05/2011 14:39 31

    Curso C - IC/UNICAMP

    Estrutura dinâmica

    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 memória

    – Elementos consecutivos adjacentes

    • Vetor:

    – Um único grande bloco de memória

    – Elementos consecutivos adjacentes

    Listas Ligadas

    Idéia principal :

    >

  • 25/05/2011 14:39 34

    Curso C - IC/UNICAMP

    • Vetor:– Um único grande bloco de memória

    – Elementos consecutivos adjacentes

    • Lista ligada:– Cada elemento em posição de memória separada

    – Posições desordenadas e não consecutivas

    • Vetor:– Um único grande bloco de memória

    – Elementos consecutivos adjacentes

    • Lista ligada:– Cada elemento em posição de memória separada

    – Posições desordenadas e não consecutivas

    Listas Ligadas

    Idéia principal :

    dados dados dados

    >

  • 25/05/2011 14:39 35

    Curso C - IC/UNICAMP

    • Vetor:

    – Um único grande bloco de memória

    – Elementos consecutivos adjacentes

    • Lista ligada:

    – Cada elemento em posição de memória separada

    – Posições desordenadas e não consecutivas

    – Apontadores para indicar seqüência correta

    • Vetor:

    – Um único grande bloco de memória

    – Elementos consecutivos adjacentes

    • Lista ligada:

    – Cada elemento em posição de memória separada

    – Posições desordenadas e não consecutivas

    – Apontadores para indicar seqüência correta

    Listas Ligadas

    Idéia 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: declaração

    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: declaração

    Nome da estrutura

    Apontador para próximo

    elemento na seqüência

    >

  • 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: declaração

    Nome da estrutura

    Apontador para próximo

    elemento na seqüência

    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 início, não 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 início, não 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 início, não 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 início, não 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 (não 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 (não 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 (não 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:– Fácil aumento/diminuição no tamanho da lista

    – Reserva memória exatamente sob medida

    – Permite mais de um critério de ordenação

    • Vantagens:– Fácil aumento/diminuição no tamanho da lista

    – Reserva memória exatamente sob medida

    – Permite mais de um critério de ordenação

    Listas Ligadas

    Vantagens/Desvantagens:

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 65

    Curso C - IC/UNICAMP

    • Vantagens:

    – Fácil aumento/diminuição no tamanho da lista

    – Reserva memória exatamente sob medida

    – Permite mais de um critério de ordenação

    • Desvantagens:

    – Para cada elemento, armazena um apontador

    – Não é possível acessar diretamente um elemento

    • Vantagens:

    – Fácil aumento/diminuição no tamanho da lista

    – Reserva memória exatamente sob medida

    – Permite mais de um critério de ordenação

    • Desvantagens:

    – Para cada elemento, armazena um apontador

    – Não é possível acessar diretamente um elemento

    Listas Ligadas

    Vantagens/Desvantagens:

    inicio_lista dados dados NULLdados

    >

  • 25/05/2011 14:39 66

    Memória Dinâmica

    • Vetor2Lista

    • Vetor2ListaRec

    • ConcatListas

    • ConcatListasRec

    • InverteLista

    • InverteListaRec

    • InverteListaNaMemoria

    •Vetor2ListaOrd

    • Vetor2ListaOrdRec

    • OperaListasRec

    • OperaComFilas

    • Lista2ListaDupla

    • Express2Arvore

    • DicionarioBinario