Curso de Cwainer/cursos/2s2011/Cap15-MemoriaDi… · 25/05/2011 14:39 @Arnaldo V. Moura, Daniel F....
Transcript of Curso de Cwainer/cursos/2s2011/Cap15-MemoriaDi… · 25/05/2011 14:39 @Arnaldo V. Moura, Daniel F....
-
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