Você está na página 1de 7

ALOCAÇÃO

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.

ISAAC WANDERSON DE PONTES XAVIER


LISTAS EM C
DEFINIÇÃO DE LISTA EM C
Uma lista é Estrutura que armazena um conjunto de elementos em
sequência. Ao contrário de um conjunto os elementos de uma lista
são ordenados e seus valores podem se repetir. Seus elementos
não precisam necessariamente estar em ordem crescente ou
decrescente, mas existe sempre um primeiro elemento, seguido
de um segundo elemento, e assim por diante. Ou seja, os
elementos são dispostos sequencialmente, em uma ordem fixa.

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

VETOR possui elementos do mesmo tipo e estão em


sequência fisicamente um ao lado do outro
na memória.

O vetor é uma estrutura de dados listada, ela


pode armazenar números de valores do
mesmo tipo. Esses dados que são
armazenados em uma matriz são chamados
de item de matriz. Podemos encontrar a
posição de um elemento em um vetor,
usamos um inteiro chamado índice vetorial.

LISTAS ENCADEADAS

As listas encadeadas estão associadas a


alocação, dinâmica e memória.

Uma lista encadeada também é uma série de


Exemplo de uma estrutura de uma células, cada uma dessas células contém um
lista encadeada objeto e o endereço da próxima célula.

TIPOS DE LISTAS Listas encadeadas simples


- Como já foi dito é uma
lista onde cada item aponta para o sucessor.
Uma lista encadeada é feita de
apontamentos, ou seja, é Uma Listas duplamente encadeadas - Nesse tipo de lista
estrutura que direciona para o seu cada item tanto vai apontar para o seu sucessor
posterior. como para o seu antecessor.

Sendo assim, temos vários tipos de Listas encadeadas circulares - Nessas listas o
lista sendo elas: último item vai sempre apontar para o primeiro.

Listas encadeadas circulares com sentinelas -


Nesse tipo de lista ela começa e termina em um
item sentinela onde os valores são nulos.

Exemplo de lista duplamente encadeada


Cada item dessa lista é representado com 3 variáveis:


Next– É o Próximo item da lista e ele vai ser nulo se for o último item;
Prev- É o item anterior da lista e vai ser nulo quando for o primeiro item.
Item- É a referência para o item na posição da lista;

GESSÉ PINHEIRO NONATO


PONTEIROS
DEFINIÇÃO
Ponteiro ou apontadores, sáo variáveis que
armazenam o endereço de memória de outras
variáveis. Falamos que “aponta” para uma
variável quando contém o endereço da mesma,
sendo utilizado para int, float, double, entre
outras.

DECLARANDO UM PONTEIRO
tipo *nome_ponteiro;

tipo : é o tipo de dado da variável cujo endereço o ponteiro armazena.

*nome_ponteiro : O nome da variável ponteiro.


O asterisco * neste tipo de declaração determina que a variável será um ponteiro.

Exemplo de declaração de ponteiro:


int *ptr;

UTILIZAÇÃO NO PROGRAMA
int main(void)
{
//valor é a variável que
//será apontada pelo ponteiro
int valor = 27;

//declaração de variável ponteiro


int *ptr;

//atribuindo o endereço da variável valor ao ponteiro


ptr = &valor;

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.

PONTEIRO PARA PONTEIRO


int main(void)
{
int x, *ptrx, **pptrx;

//inicializando a variável com zero


x = 0;
printf("\nvalor de x = %d\n", x);
printf("Endereço de x: %x\n\n",&x);

//Atribuindo os endereços para os ponteiros


ptrx = &x; // ptrx aponta para x
pptrx = &ptrx; // pptrx aponta para ptrx

*ptrx = *ptrx + 10;


printf("\nvalor de x = %d", x);
printf("\nEndereço apontado por ptrx: %x\n",ptrx);
printf("Valor da variável X que esta sendo apontada por ptrx: %d\n",*ptrx); X
0
printf("Endereço de memória da variável ptrx %x\n",&ptrx); 62FE4C

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
}

PEDRO FELIPE MAIA RODRIGUES


RECURSIVIDADE

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

JOÃO FRANCISCO QUERINO DINIZ


PILHA
DEFINIÇÃO
Uma estrutura do tipo pilha é uma sequência de
elementos do mesmo tipo, como as listas e filas.
Seus elementos possuem estrutura interna
abstraída, ou seja, complexidade é arbitrária e não
afeta seu funcionamento.

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

Criação da pilha Essas operações dependem


Inserção de um elemento no início do tipo de alocação de
Exclusão de um elemento do início memória usada, sendo
Acesso a um elemento do início estática ou dinâmica.
Destruição da pilha

Alocação estática Alocação dinâmica


O espaço da memória é alocada no O espaço da memória é alocado em
momento da compilação tempo de execução.
Exige a definição do número A pilha cresce quando novos
máximo de elementos da pilha elementos são armazenados, e
Acesso sequencial: elementos diminui à medida que são removidos
consecutivos na memória Acesso encadeado: cada elemento
pode estar em uma área diferente da
mémória.

EXEMPLOS

WILLIAN ALENCAR ALVES


FILA
DEFINIÇÃO
Uma estrutura do tipo fila é uma sequência de
elementos do mesmo tipo, como as listas.
Seus elementos possuem esturtura interna
abstraída, ou seja, sua complexidade é arbitrária e
não afentando seu funcionamento.

inserções e exclusões de APLICAÇÕES


elementos ocorrem nas
extremidades da lista
Controle de fluxo
Recursos compartilhados (impressora, transações de
banco de dados, etc)
Converter uma expressão in-fixa para pós-fixa
Converter um número decimal para binário

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

Alocação estática Alocação dinâmica


O espaço da memória é alocada no O espaço da memória é alocado em
momento da compilação tempo de execução.
Exige a definição do número A fila cresce quando novos elementos
máximo de elementos da fila são armazenados, e diminui à medida
Acesso sequencial: elementos que são removidos
consecutivos na memória Acesso encadeado: cada elemento
pode estar em uma área distinta da
memória.

EXEMPLOS

ISAAC WANDERSON DE PONTES XAVIER


GRAFOS
DEFINIÇÃO
Um grafo (= graph) é um par de conjuntos: um
conjunto de vértices e um conjunto de aresta.
Sendo o primeiro vértice do par a ponta inicial e o
segundo é a ponta final.

Imagine um sistema de abastecimento de água,


agora representaremos na direita o grafo.

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

Lado esquerdo a função em C que grafo. No lado


direito a representação gráfica desta função.

OBRIGADO!

Você também pode gostar