Escolar Documentos
Profissional Documentos
Cultura Documentos
DINÂMICA
ALOCAÇÃO DINÂMICA
Na alocação dinâmica podemos alocar espaços durante a
execução de um programa, ou seja, a alocação dinâmica é feita
em tempo de execução. Isto é bem interessante do ponto de
vista do programador, pois permite que o espaço em memória
seja alocado apenas quando necessário. Além disso, a alocação
dinâmica permite aumentar ou até diminuir a quantidade de
memória alocada.
BIBLIOTECA
malloc;
calloc;
realloc;
free.
FUNÇÃO MALLOC
O parâmetro size_t é utilizado para definir o
tamanho de um bloco de dados que será
alocado;
O retorno da função malloc é um ponteiro do
tipo void. Esse ponteiro representa o endereço
do bloco de dados alocado.
FUNÇÃO FREE
A função free, ao contrário da função
malloc, deve ser utilizada para liberar um
bloco alocado;
É importante ressaltar que o endereço
passado para função free deve ser um
endereço obtido por uma das funções de
alocação.
FUNÇÃO CALLOC
A função calloc tem a mesma operação malloc, isto
é, reserva um bloco de memória com base na
quantidade de bytes informada. A diferença está
nos parâmetros recebidos. Essa função recebe no
primeiro parâmetro a quantidade de elementos
que serão alocados, já no segundo parâmetro é
informado o tamanho do tipo de dado.
FUNÇÃO REALLOC
A função realloc pode ser utilizada para
redimensionar um bloco. Deste modo, um bloco
pode aumentar ou diminuir o seu tamanho em
tempo de execução. Para esse tipo de
operação a função realloc deve receber o
endereço do bloco alocado e o tamanho em
bytes que será definido na operação. O retorno
da função é o endereço do novo bloco alocado.
TIPOS DE LISTAS
As duas formas mais comuns de uma lista
são através vetores ou de listas
encadeadas.
O vetor pode ser considerado uma lista pois
LISTAS ENCADEADAS
Sendo assim, temos vários tipos de Listas encadeadas circulares - Nessas listas o
lista sendo elas: último item vai sempre apontar para o primeiro.
DECLARANDO UM PONTEIRO
tipo *nome_ponteiro;
UTILIZAÇÃO NO PROGRAMA
int main(void)
{
//valor é a variável que
//será apontada pelo ponteiro
int valor = 27;
printf("Utilizando ponteiros\n\n");
printf ("Conteudo da variavel valor: %d\n", valor);
printf ("Endereço da variavel valor: %x \n", &valor);
printf ("Conteudo da variavel ponteiro ptr: %x", ptr);
%d pois o valor será inteiro no caso o
27, %x mostra os valores em
getch();
hexadecimal e &valor mostra o
return(0);
endereço de memória. E depois o
}
conteúdo da variável ponteiro, para
confirmação dele.
x = 0;
**pptrx = **pptrx + 10;
ptrx = &x;
printf("\n\nvalor de x = %d", x);
pptrx = &ptrx;
printf("\nEndereço apontado por **pptrx: %x",pptrx); PTRX
62FE4C
printf("\nValor da variável para a qual pptrx faz referência: %d",**pptrx); 62FE40
printf("\nEndereço de memoria da variavel **pptrx %x\n\n",&pptrx);
PPTRX
return 0; 62FE40
62FE38
}
DEFINIÇÃO
Chamamos de recursividade ou recursão quando uma função
chama a si mesma.
É POSSIVEL?
Sim , isto é possível, uma função pode invocar a si mesma!
COMO FUNCIONA A
RECURSIVIDADE?
Em uma função recursiva, a cada chamada é criada na memória uma nova ocorrência da
função com comandos e variáveis “isolados” das ocorrências anteriores.
A função é executada até que todas as ocorrências tenham sido resolvidas.
Porém um problema que surge ao usar a recursividade é como fazê-la parar. Caso o
programador não tenha cuidado é fácil cair num loop infinito recursivo o qual pode inclusive
esgotar a memória.
Toda recursividade é composta por um caso base e pelas chamadas recursivas.
CASO BASE E
CHAMADAS RECURSIVAS
Caso base: é o caso mais simples. É usada uma condição em que se
resolve o problema com facilidade.
Chamadas Recursivas: procuram simplificar o problema de tal forma
que convergem para o caso base.
VANTAGENS/
DESVANTAGENS
Vantagens da recursividade
Torna a escrita do código mais simples e elegante, tornando-o fácil de entender
e de manter.
Desvantagens da recursividade
Quando o loop recursivo é muito grande é consumida muita memória nas
chamadas a diversos níveis de recursão, pois cada chamada recursiva aloca
memória para os parâmetros, variáveis locais e de controle.
Em muitos casos uma solução iterativa gasta menos memória, e torna-se mais
eficiente em termos de performance do que usar recursão.
EXEMPLO CLÁSSICO DE
RECURSIVIDADE: FATORIAL
APLICAÇÕES
- Análise de uma expressão matemática
- Avaliação de expressão pós-fixa
- Converter uma expressão in-fixa para pós-fixa
- Converter um número decimal para binário
OPERAÇÕES BÁSICAS
EXEMPLOS
OPERAÇÕES BÁSICAS
Criação da fila Dependem do tipo de
Inserção de um elemento no final alocação de memória usada
Remoção de um elemento do início sendo estática ou dinâmica.
Acesso a um elemento do início
Destruição da fila
EXEMPLOS
REPRESENTAÇÃO
É definido como um conjunto de
vértices e um conjunto de arestas
que conectam qualquer par de V é o conjunto de vértices (não vazio)
vértices. A é o conjunto de arestas
G = (V, A)
EXEMPLOS
OBRIGADO!