Buscar

Estruturas-Dinamica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 45 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Ponteiros
● São Estruturas de dados semelhantes as variáveis que tem como 
valor de armazenamento um endereço de memória que comporta 
uma estrutura de dados simples ou complexa.
● Ex:
int p = NULL; → Ponteiro p (*p) do tipo inteiro;
● Esse ponteiro tem a capacidade de guardar um endereço de 
memória que suporta um valor do tipo inteiro. Esse ponteiro 
armazena uma estrutura simples;
p = new(int); → atribui ao ponteiro um endereço de memória 
vazio, com capacidade de um inteiro.
*p = 10; → altera o conteúdo do endereço de memória alocado no 
ponteiro.
 
Ponteiros
p
0x210F9A
*p
0x210F9A
Modelo A Modelo B
10
Modelo A – o valor de p = 0x210F9A
Modelo B – o valor de *p = 10
 
Listas Dinâmicas
● Essas estruturas utilizam formatos de 
manipulação de dados e um marcador 
lógico que indica diretamente o próximo 
elemento da lista, contudo não apresentam 
uma quantidade pré-definida de elementos
● Os marcadores dinâmicos utilizam 
estruturas de alocação direta de memória 
RAM chamados de ponteiros.
 
Listas Dinâmicas
● Os ponteiros são estruturas de dados que 
armazenam, como conteúdo, endereços de 
memória RAM.
● Apesar de não tratarmos os valores de 
memória manualmente, os ponteiros podem 
 realizar trocas e atribuições como uma 
variável simples
● As estruturas de listas dinâmicas podem ter 
1 ou mais ponteiros como referência.
 
Listas Dinâmicas
● As operações com listas dinâmicas são as 
mesmas das listas estáticas: inclusão 
(início, fim e qualquer posição), exclusão 
(início, fim e qualquer posição) e 
impressão/pesquisa.
 
Listas Dinâmicas
● Estrutura de uma lista dinâmica
typedef struct listad;
struct listad{
int ra;
listad *prox;
};
listad inicio=null, novo=null, aux=null;
 
Listas Dinâmica – Inclusão 
no fim
subrotina ld_inclui_fim
 se(inicio == nulo)
 inicio = aloca(elemento);
 leia(inicio);
 inicio → prox = nulo;
 senão inicio
 aux = inicio;
 enquanto(aux → prox != nulo)
 aux = aux → prox;
 novo = aloca(elemento);
 leia(novo);
 aux → prox = novo;
 fim 
 
Listas Dinâmica – Inclusão 
no fim
void ld_inclui_fim(){
novo = new(listad); // ou em C inicio = malloc(sizeof(listad));
printf(“ digite o RA: %d”, inicio->ra);
scanf(“%d”, &novo->ra);
novo->prox = null;
 if(inicio == null)
 inicio = novo;
else {
 aux = inicio;
 while(aux->prox != null)
 aux = aux->prox;
 aux->prox = novo; }
 }
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
D
novo
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x9AAA:00123
A B C
proximo
D
novo
 
Listas Dinâmicas – Inclusão 
no início
subrotina ld_inclui_inicio
 inicio
 se(inicio == nulo)
inicio = aloca(elemento);
leia(inicio);
inicio → prox = nulo;
 senão inicio
 novo = aloca(elemento);
 leia(novo);
 novo → prox = inicio;
novo = inicio;
 fim
 fim
 
Listas Dinâmicas – Inclusão 
no início
void ld_inclui_inicio(){
 novo = new(listad); // ou em C inicio = malloc(sizeof(listad));
printf(“ digite o RA: %d”, inicio->ra);
scanf(“%d”, &novo->ra);
novo->prox = null;
 if(inicio == null)
 inicio = novo;
else{
 novo->prox = inicio;
inicio = novo;
 }
 }
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
D
novo
início
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
D
novo
início
 
Listas Dinâmica – Inclusão no 
fim
fim_lista=0x5fe234:49fff
A B C
proximo
D
novo
início
 
Listas Estáticas - Exclusão
subrotina exclui_inicio
 se(inicio == nulo)
 Escreva(“lista vazia”)
 senão inicio
 inicio = inicio → prox 
 fim
 
Listas Estáticas - Exclusão
void exclui_inicio(){
 if(inicio == null)
 printf(“lista vazia”)
else{
 aux = inicio;
delete(aux); // Em C dispose(aux); 
inicio = inicio->prox;
 }
}
 
Listas Dinâmica – Exclusão no 
início
fim_lista=0x5fe234:49fff
A B C
proximo
D
início
 
Listas Dinâmica – Exclusão no 
início
fim_lista=0x5fe234:49fff
A B C
proximo
D
início
 
Listas Dinâmica – Exclusão no 
início
fim_lista=0x5fe234:49fff
A B C
proximo
D
início
 
Listas Estáticas - Exclusão
subrotina ld_exclui_fim
 se(inicio == nulo)
 Escreva(“lista vazia”)
 senão inicio
 ultimo = inicio;
 penultimo = inicio;
 enquanto( ultimo → prox != nulo)
 ultimo = ultimo → prox;
 enquanto( penultimo → prox != ultimo)
 penultimo = penultimo → prox
 penultimo → prox = nulo;
 fim
 
Listas Estáticas - Exclusão
void ld_exclui_fim(){
 if(inicio == null)
 printf(“lista vazia”)
 else{
 ultimo = inicio;
 penultimo = inicio;
 while( ultimo-> prox != null)
 ultimo = ultimo->prox;
 while( penultimo-> prox != ultimo)
 penultimo = penultimo-> prox
 penultimo-> prox = nulo;
 delete(ultimo); // dispose(ultimo);
 }
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
inícioinício
penultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
inícioinício
penultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
inícioinício
penultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
inícioinício
penultimo
 
Listas Dinâmica – Exclusão no 
fim
A B C
proximo
D
início
ultimo
inícioinício
penultimo
 
Recursividade
● Metodologia de interação (loop) que utiliza uma 
estrutura diferenciada através do empilhamento das 
execuções de uma subrotina
● A recursão é estruturada em:
– Condição de Parada → momento em que o código 
irá parar de empilhar execuções e deverá retornar 
um valor;
– Código Recursivo → chamada da própria subrotina 
através de uma função acumulativa
● Os código recursivos são mais rápidos e simples que 
os comandos de repetição usuais.
 
Recursividade
● Exemplo:
int somatorio (int x){
 if(x == 1) {
return(1);}
 else 
return(x + somatorio(x-1));
}
 
Recursividade
● Exemplo:
int fatorial (int x){
 if(x == 1) {
return(1);}
 else 
return(x * fatorial(x-1));
}
 
Recursividade
if(x == 1) return(1)
elsereturn(3+somatorio(2))
printf(somatorio(3));
if(x == 1) return(1)
elsereturn(2+somatorio(1))
if(x == 1) return(1) somatorio(1)
somatorio(2)
somatorio(3)
1
3
6Árvores Binárias
● É uma estrutura de dados utilizada na distribuição das informações 
seguindo um padrão pré-determinado
● O padrão utilizado é o seguinte:
– O primeiro elemento incluído na árvore é classificado como raíz;
– Os próximos elementos a serem adicionados serão incluídos a 
direita, se o seu valor for maior que a raíz, e a esquerda caso o 
valor do elemento seja menor que a raíz.
● Seu sistema de busca dos elementos podem auxiliar na melhoria de 
desempenho na ordenação desses elementos ou no próprio acesso 
a eles.
● Os elementos mais externos sem conexão com outros elementos são 
chamados de nós folhas e os demais nós raizes.
 
Árvores Binárias
Esquerda
10
Direita
raiz
8 15
1295
 
Árvores Binárias
● A estrutura de uma árvore binário em linguagem C:
typedef struct arvore;
struct arvore
{
 int val; → conteúdo do nó
 arvore *e; → indicador (ponteiro) da ramificação à esquerda
 arvore *d;→ indicador (ponteiro) da ramificação a direita
};
arvore raiz = NULL, aux = NULL; aux2 = NULL;
 
Árvores Binárias
● Criação de um novo elemento na memória no formato do elemento 
da árvore
void novo_no()
{
 aux = new(arvore);
 aux->e = NULL;
 aux->d = NULL;
 std::cin>>aux->val;
}
 
Árvores Binárias
● Inserção recursiva seguindo as regras de árvores binárias
*arvore insere(arvore *novo, arvore *tmp)
{
 if(tmp == NULL)
 {
 return(novo);
 }
 else{
 if(novo->val > tmp->val)
 tmp->d = insere(novo->val, tmp->d);
 if(novo->val < tmp->val)
 tmp->e = insere(novo->val, tmp->e);
 return(tmp);
 } 
}
 
Árvores Binárias
● Buscas em Árvores Binárias são metodologias de como acessar os 
elementos da árvore binária
void preordem(arvore *tmp)
{
 if(tmp != NULL)
 {
 cout<<tmp->val;
 preordem(tmp->e);
 preordem(tmp->d);
 }
}
 
Árvores Binárias
● Buscas em Árvores Binárias são metodologias de como acessar os 
elementos da árvore binária
void emordem(arvore *tmp)
{
 if(tmp != NULL)
 {
 emordem(tmp->e);
 cout<<tmp->val;
 emordem(tmp->d);
 }
}
 
Árvores Binárias
● Buscas em Árvores Binárias são metodologias de como acessar os 
elementos da árvore binária
void posordem(arvore *tmp)
{
 if(tmp != NULL)
 {
 posordem(tmp->e);
 posordem(tmp->d);
 cout<<tmp->val;
 }
}
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45

Outros materiais