Buscar

Estrutura de Dados - Aula 08

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 99 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 99 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 99 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

ESTRUTURA DE DADOS
Aula 8 – Alocação Dinâmica/ Listas Encadeadas - Introdução 
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Atenção aos Temas Principais dessa Aula
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Conteúdo Programático desta aula

&
&





ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Direto ao Assunto
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
A alocação dinâmica de memória vem possibilitar a
criação de tipos de dados e estruturas de qualquer
tamanho durante a execução do programa, além de
evitar alocação de memória desnecessária.
A vantagem
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Para alocar / desalocar usaremos as funções
malloc() e free()?
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ATENÇÃO! Isso é linguagem C. Na
linguagem C++, usaremos new e
delete.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Sua função é fazer alocação dinâmica de memória,
retornando o endereço inicial do bloco alocado.
Você poderá alocar espaço para armazenar um dado ou
um conjunto de dados(array).
Se você for alocar para armazenar um dado,, deverá fazê-
lo com new,, mas se for para armazenar um array, use
new[ ].
Operador new
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Sua função é retornar para a área de memória livre o
espaço que foi alocado dinamicamente.
Se você for retornar uma área que estava armazenando
um valor, deverá usar delete, mas se for um array, use
delete [ ].
Operador delete
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Só usarmos esse operador não nos dará garantia de que
tudo ocorrerá sem problemas com afirma DROZDEK,
A(2002, p.9-10)
Operador delete
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Uma das formas de se fazer isso, é atribuir 0(zero) à
variável ponteiro para que ela se torne nula.
Operador delete
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Fragmentação Externa e Fragmentação Interna
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
OPERADORES
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
OPERADOR de ENDEREÇO
OPERADORES
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
OPERADOR de ENDEREÇO
OPERADORES
Retorna o endereço do operando
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
OPERADOR de INDIREÇÃO
OPERADORES
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
OPERADOR de INDIREÇÃO
OPERADORES
Retorna o conteúdo do endereço 
apontado pelo ponteiro
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
tipo *nomeVariávelPonteiro; 
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
tipo *nomeVariávelPonteiro; 
O que armazena?
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
tipo *nomeVariávelPonteiro; 
O que armazena?
O endereço de uma variável. 
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
tipo *nomeVariávelPonteiro; 
O que armazena?
O endereço de uma variável. 
Como é feita a escolha do tipo do ponteiro?
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se declara uma variável do tipo ponteiro?
tipo *nomeVariávelPonteiro; 
O que armazena?
O endereço de uma variável. 
Como é feita a escolha do tipo do ponteiro?
Depende da variável apontada pelo ponteiro.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se inicializa uma variável do tipo ponteiro?
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se inicializa uma variável do tipo ponteiro?
int , *pa;
&
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se inicializa uma variável do tipo ponteiro?
int , *pa;
&
int =, *pa=&; 
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se inicializa uma variável do tipo ponteiro?
int , *pa;
&
int =, *pa=&; 
int =, *ptrAno;
&
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Como se inicializa uma variável do tipo ponteiro?
int , *pa;
&
int =, *pa=&; 
int =, *ptrAno;
&
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl;
cout << &ano << endl;
cout << ptrano << endl;
cout << &ptrano << endl;
cout << *ptrano << endl;
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl; 1989
cout << &ano << endl;
cout << ptrano << endl;
cout << &ptrano << endl;
cout << *ptrano << endl;
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl; 1989
cout << &ano << endl; 0x22ff74
cout << ptrano << endl;
cout << &ptrano << endl;
cout << *ptrano << endl;
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl; 1989
cout << &ano << endl; 0x22ff74
cout << ptrano << endl; 0x22ff74
cout << &ptrano << endl;
cout << *ptrano << endl;
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl; 1989
cout << &ano << endl; 0x22ff74
cout << ptrano << endl; 0x22ff74
cout << &ptrano << endl; 0x22ff70
cout << *ptrano << endl;
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Entendendo
cout << ano << endl; 1989
cout << &ano << endl; 0x22ff74
cout << ptrano << endl; 0x22ff74
cout << &ptrano << endl; 0x22ff70
cout << *ptrano << endl; 1989
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
PONTEIRO para ESTRUTURA
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
PONTEIRO para ESTRUTURA
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução– Aula8
PONTEIRO para ESTRUTURA
Acessando um membro
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
PONTEIRO para ESTRUTURA
Acessando um membro
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
PONTEIRO e ALOCAÇÃO DINÂMICA
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
1a Sintaxe
O significado de cada elemento
tipo int/ float/ char/ ...
* Sinaliza que a variável é um ponteiro
new Aloca a memória dinamicamente
tipo do dado. O ponteiro tem o tipo desse 
dado: int/ float/ char/ ...
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
2a Sintaxe
O significado de cada elemento
tipo int/ float/ char/ ...
* Sinaliza que a variável é um ponteiro
new Aloca a memória dinamicamente
tipo[...]
do dado. O ponteiro tem o tipo desse 
dado: int/ float/ char/ ...
Aloca uma quantidade especificada
dentro dos colchetes.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
float *ptF= new float;
int *ptI= new int(1989);
int *pt= new int[300];
Exemplo 1
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
float *ptF= new float;
int *ptI= new int(1989);
int *pt= new int[3];
*ptF=34.5;
*(pt)=34; *(pt+1)=55; *(pt+2)=90;
cout<<"\n\nConteudo de pt : "<<pt;
cout<<"\tconteudo do endereco apontado: "<<*pt;
Exemplo 1
Código
1
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
cout<<"\n\nConteudo de ptI: "<<ptI;
cout<<"\tconteudo do endereco apontado: "<<*ptI;
cout<<"\n\nConteudo de ptF: "<<ptF;
cout<<"\tconteudo do endereco apontado: "<<*ptF;
cout<<"\n\nConteudo do vetor\n";
cout<<"\n"<<*pt<<"\t"<<*(pt+1)<<"\t"<<*(pt+2);
delete ptF; delete ptI; delete pt;
cout<<"\n\n"; system("pause");
}
Exemplo 1
Código
2
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
ptr2=new int; *ptr2=15;
...
ptr1=new int; ptr2=ptr1; *ptr1=1518;
...
delete ptr1; delete ptr2;
Exemplo 2
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
ptr2=new int; *ptr2=15;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
ptr1=new int; ptr2=ptr1; *ptr1=1518;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
delete ptr1; delete ptr2;
cout<<"\n\n";
system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
ptr2=new int; *ptr2=15;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
ptr1=new int; ptr2=ptr1; *ptr1=1518;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
delete ptr1; delete ptr2;
cout<<"\n\n";
system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
ptr2=new int; *ptr2=15;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
ptr1=new int; ptr2=ptr1; *ptr1=1518;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
delete ptr1; delete ptr2;
cout<<"\n\n";
system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
ptr2=new int; *ptr2=15;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
ptr1=new int; ptr2=ptr1; *ptr1=1518;
cout<<"\nValores das tres variaveis - p: "<<p<<"\tptr1:
"<<*ptr1<<"\tptr2: "<<*ptr2;
delete ptr1; delete ptr2;
cout<<"\n\n";
system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int p, *ptr1, *ptr2; ptr1=&p; *ptr1=1918;
cout<<"\nEnderecos - p: "<<&p<<"\t\tptr1: "<<&ptr1<<"\t\tptr2: "<<&ptr2;
ptr2=new int; *ptr2=15;
cout<<"\n\nConteudo de ptr2: "<<ptr2<<"\tconteudo do endereco apontado:
"<<*ptr2;
cout<<"\n\nConteudo de p: "<<p;
cout<<"\nconteudo do endereco apontado por ptr1: "<<*ptr1;
cout<<"\nconteudo do endereco apontado por ptr2: "<<*ptr2;
ptr1=new int; ptr2=ptr1; *ptr1=1518;
cout<<"\n\nConteudo de ptr1: "<<ptr1<<"\tconteudo de ptr2: "<<ptr2;
cout<<"\n\nConteudo de p: "<<p;
cout<<"\nconteudo do endereco apontado por ptr1: "<<*ptr1;
cout<<"\nconteudo do endereco apontado por ptr2: "<<*ptr2;
delete ptr1; delete ptr2;
cout<<"\n\n"; system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Opção 1
Opção 2
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Opção 3
Opção 4
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Opção 5
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
int op, n, x, f1,f2,f3;
f1=f2=f3=0;
float *alunos, soma=0, media;
do
{
system("cls");
system("color fc");
cout<<"\n\n~ ~ ~ Alocacao Dinamica ~ ~ ~";
cout<<"\n~ ~";
cout<<"\n~ 1- insere numero de alunos ~";
cout<<"\n~ 2- Insere notas ~";
Código
1
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
cout<<"\n~ 3- Calcula media da turma ~";
cout<<"\n~ 4- Exibe ~";
cout<<"\n~ 5-Sai ~";
cout<<"\n~ Opcao: ~";
cout<<"\n~ ~";
cout<<"\n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n";
cin>>op;
system("cls"); system("color 0e");
switch(op)
{
case 1:cout<<"\nDigite numero de alunos: "; cin>>n;
alunos=new float[n];
if(alunos==0)
{ cout<<"\nNao foi possivel fazer Alocacao\n";
return 1;
} f1=1; break;
Código
2
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
case 2:if(f1==1)
{
for(x=0; x<n; x++)
{ cout<<"\nDigite nota: "; cin>>alunos[x]; }
f2=1;
}
else cout<<"\nVoce nao determinou a quantidade\n";
break;
case 3:if(f2==1)
{
for(soma=alunos[0], x=1; x<n; x++) soma+=alunos[x];
media=soma/n;
cout<<"\nMedia Calculada\n\n";
f3=1;
}
else cout<<"\nVoce pulou alguma(s) etapa(s)\n";
break;
Código
3
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
case 4:if(f3==1)
{
cout<<"\nRelacao da Notas\n";
for(x=0; x<n; x++)
cout<<"\n"<<setw(3)<<x+1<<" - "<<alunos[x];
cout<<"\n\nMedia da Turma: “;
cout<< setprecision(3)<<media;
}
else cout<<"\nVoce pulou alguma(s) etapa(s)\n";
break;
case 5:cout<<"\nFim da alocacao Dinamica";
delete []alunos; alunos=0;
break;
default:cout<<"\nOpcao Invalida\n";
} cout<<"\n\n"; system("pause");
} while(op !=5);
return 0;}
Código
4
ESTRUTURADE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Declara com ponteiro e usa como matriz?
float *alunos,...; cin>>alunos[x];
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Vamos aprender sobre a estreita relação
entre ponteiros e matrizes.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
A estreita relação entre PONTEIROS e MATRIZES.
Suponha uma variável ponteiro do tipo int, de nome
ptrAno e de tamanho 4.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Toda vez que usarmos a expressão ptrAno + 1, estaremos
dizendo que o ponteiro irá se deslocar de 4 posições
porque é o que o tipo ocupa.
A estreita relação entre PONTEIROS e MATRIZES.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Se recordarmos o significado do índice de uma matriz
(deslocamento do endereço base), perceberemos que
tem o mesmo significado.
Toda vez que usarmos a expressão ptrAno + 1, estaremos
dizendo que o ponteiro irá se deslocar de 4 posições
porque é o que o tipo ocupa.
A estreita relação entre PONTEIROS e MATRIZES.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
A estreita relação entre PONTEIROS e MATRIZES.
Sendo assim, uma variável do tipo ponteiro poderá ser
tratada como vetor e vice-versa.
Para que posamos armazenar um valor usando cin>> e
ponteiro, faremos:
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
cin>>*(alunos+x); seria equivalente à cin>>alunos[x];
A estreita relação entre PONTEIROS e MATRIZES.
Sendo assim, uma variável do tipo ponteiro poderá ser
tratada como vetor e vice-versa.
Para que posamos armazenar um valor usando cin>> e
ponteiro, faremos:
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
1a parte
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
As Listas Encadeadas podem ser:
Encadeamento Simples – cada nó é ligado por um ponteiro,
permitindo que ela seja percorrida(cruzada) do primeiro ao
último elemento.
Encadeamento duplo – cada nó é ligado por dois ponteiros.
Esse tipo de lista permite um cruzamento igual ao da Lista
Simples, mas acrescenta a possibilidade da lista ser
percorrida(cruzada) de trás para frente.
Encadeadas circulares – onde o último nó é ligado ao
primeiro, significando que não existe NULL.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Listas de encadeamento simples, normalmente chamadas
simplesmente de Listas Encadeadas, são compostas de
elementos individuais, cada um ligado por um único
ponteiro. Cada elemento consiste de duas partes: um
membro de dados e um ponteiro.(LOUDON, K, 2000, p.56)
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Se olharmos para este nó,
poderemos entendê-lo como sendo
uma estrutura, visto que ele é
formado por dois tipos diferentes,
sendo um, necessariamente,
ponteiro.
A lista é formada por nós
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
O ponteiro aponta para um nó. Logo, ele
tem que ser do mesmo tipo que o nó.
Uma estrutura? Como vou poder definir o
tipo de um membro como sendo uma
estrutura que está sendo definida e que
esse membro faz parte dessa estrutura?
Só pesquisando no Drozdek.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Você tem razão! Veja o que ele diz:
“Essa circularidade, no entanto, é permitida
em C++”. (DROZDEK, A, 2002, p.68)
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
1) Definindo a struct
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
1) Definindo a struct
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
2) Criando nó
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
2) Criando nó
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
2) Criando nó
3) Atribuindo valores aos membros
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
2) Criando nó
3) Atribuindo valores aos membros
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
4) Exibindo
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
4) Exibindo
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
4) Exibindo
5) Liberando
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Criando uma lista de um nó
4) Exibindo
5) Liberando
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
#include <iostream>
#include <cstdlib>
using namespace std;
struct nodo
{
int info;
nodo *link;
};
int main()
{
nodo* no=new nodo; //criando nó
no->info=23; //atribuindo (*no).info=23;
no->link=NULL;
cout<<"\nValor do no: "<< no->info;
delete no; //liberando
no=0; //pelo que falamos
cout<<"\n\n"; system("pause");
}
Código
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
A Aula 8 foi dividida em duas partes: Alocação Dinâmica
e início de Listas Encadeadas.
Na Aula 9, finalizarei Listas encadeadas e apresentarei
Pilha Dinâmica e Fila Dinâmica.
ESTRUTURA DE DADOS
Alocação Dinâmica / Listas Encadeadas - Introdução – Aula8
Resumindo

Outros materiais