Lembra
que
eu
falei
que
podia
colocar
um
struct
dentro
do
mesmo
struct?
Pois
é,
assim
que
funcionam
as
listas
encadeadas.
De
certa
forma
elas
são
como
um
vetor,
tem
vários
objetos
do
mesmo
tipo,
mas
no
caso
das
listas
pode
ter
quantos
quiser
(não
só
o
tamanho
do
vetor)
e
é
bem
mais
manipulável.
A
lógica
das
listas
encadeadas
é
uma
struct
conter
um
ponteiro
para
o
mesmo
tipo.
Dessa
forma,
um
objeto
vai
se
ligando
do
outro,
porque
ele
aponta
quem
é
o
próximo
da
lista.
Assim:
struct
Nodo
{
int
dado;
struct
Nodo
*proximo;
}
*raiz;
//declara
um
ponteiro
da
struct
Nodo
chamado
raiz
raiz
=
(Nodo
*)
malloc
(sizeof(Nodo));
//aloca
o
tamanho
da
raiz
raiz->dado
=
7;
//preenche
o
dado
raiz->proximo
=
NULL;
//fala
que
não
tem
próximo
(ou
seja,
é
o
fim
da
lista)
Nodo
*pnodo;
//declara
outro
ponteiro,
dessa
vez
chamado
pnodo
pnodo
=
(Nodo
*)
malloc(sizeof(Nodo));
//aloca
pnodo
pnodo->dado
=
11;
//preenche
o
dado
pnodo->proximo
=
NULL;
//declara
que
é
esse
o
fim
da
lista
raiz->proximo
=
pnodo;
//fala
que
raiz
agora
deixa
de
ser
o
fim
e
aponta
pra
pnodo
Dessa
forma,
vai
tendo
uma
continuidade,
já
que
um
vai
apontando
pro
outro.
Esse
tipo
de
lista
é
bem
mais
prático
que
um
vetor,
porque
não
tem
um
tamanho
fixo
e
não
precisa
ser
um
logo
seguido
do
outro
(em
termos
de
alocação
de
memória).
Agora
vamos
aos
procedimentos
básicos:
- Como percorrer uma lista encadeada utilizando um ponteiro
Nodo
*pnodo;
pnodo
=
raiz;
while
(pnodo
!=
NULL)
{
printf(“%d
“,
pnodo->dado);
pnodo
=
pnodo->proximo;
}
- Como imprimir uma lista encadeada usando um ponteiro
void
print_list
(struct
Nodo
*pi)
{
printf("Lista
=
");
while
(pi)
{
printf
("
%d
",
pi->dado);
pi
=
pi->proximo;
}
}
Nenhum comentário:
Postar um comentário