Anda di halaman 1dari 27

Listas Duplamente Encadeadas

Prof. Esp. Rodrigo Hentz

Listas Duplamente Encadeadas


Definio
Uma lista encadeada circular tem mais vantagens sobre uma lista
encadeada linear, porm ainda apresenta algumas deficincias.
No podemos atravessar uma lista deste tipo no sentido contrrio

ou ainda para inserir ou adicionar um novo n temos de ter um


ponteiro para seu sucessor.

Listas Duplamente Encadeadas


Definio
Caso estes recursos sejam necessrios, a estrutura de dados
adequada uma lista duplamente ligada.
Cada n em uma lista deste tipo contm dois ponteiros, um para

seu predecessor e um para seu sucessor.


As listas duplamente ligadas podem ser lineares ou circulares e
podem ou no conter um n de cabealho.

Listas Duplamente Encadeadas


Definio

Listas Duplamente Encadeadas


Definio
Podemos considerar os ns em uma lista duplamente ligada como
consistindo em trs campos: um atributo INF que contm as
informaes armazenadas no n e os campos anterior e prximo,

que contm ponteiros para os ns em ambos os lados (esquerdo e


direito).

Listas Duplamente Encadeadas


Definio
Podemos declarar um conjunto de ns deste tipo usando a
implementao em vetor ou dinmica:

Listas Duplamente Encadeadas


Rotinas
Apresentaremos agora rotinas que operam sobre listas duplamente
encadeadas.
Uma propriedade conveniente dessas listas que, se p for um

ponteiro para um n qualquer, permitindo que anterior(p) seja uma


abreviao para no[p].anterior ou p->anterior, e proximo(p) uma
abreviao para no[p].proximo ou p->proximo, teremos:

anterior(proximo(p)) = p = proximo(anterior(p))
8

Listas Duplamente Encadeadas


Rotinas
Apresentaremos agora rotinas que operam sobre listas duplamente
encadeadas.
Uma propriedade conveniente dessas listas que, se p for um

ponteiro para um n qualquer, permitindo que anterior(p) seja uma


abreviao para no[p].anterior ou p->anterior, e proximo(p) uma
abreviao para no[p].proximo ou p->proximo, teremos:

anterior(proximo(p)) = p = proximo(anterior(p))
9

Listas Duplamente Encadeadas


Rotinas
Funes utilizadas em uma lista duplamente encadeada:
Criao da lista encadeada e inicializao
Criao do n dinamicamente

Inserir n no inicio
Inserir n no final
Inserir n ordenado
Remover n
Pesquisar n
Imprimir ns
10

Listas Duplamente Encadeadas


Criao da Estrutura

11

Listas Duplamente Encadeadas


Criao da lista
O ponteiro inicial da lista definido e atribudo a nulo.

12

Listas Duplamente Encadeadas


Criao da lista
O ponteiro inicial da lista definido e atribudo a nulo.

13

Definindo o menu inicial

14

Listas Duplamente Encadeadas


Criao de um n dinamicamente
Um novo n criado utilizando as funes de alocao dinmica e
seu ponteiro retornado com base no endereo de memria onde foi
criado.

15

Listas Duplamente Encadeadas


Inserir n no incio
Um novo n inserido no incio da lista passando a ser o cabealho
da lista. Caso j existir um n ele deve ser amarrado ao novo.

16

Listas Duplamente Encadeadas


Inserir n no incio e chamada do menu

17

Listas Duplamente Encadeadas


Inserir n no final
Um novo n inserido no final da lista.

18

Listas Duplamente Encadeadas


Inserir n no final e chamada do menu

19

Listas Duplamente Encadeadas


Inserir n ordenado
Um novo n inserido na posio baseado no ndice.

20

Listas Duplamente Encadeadas

21

Listas Duplamente Encadeadas

22

Listas Duplamente Encadeadas


Excluir um n
O n retirado da lista e sua alocao liberada. Os ponteiros
anterior e prximo so alimentados nos outros ns.

23

Listas Duplamente Encadeadas

24

Listas Duplamente Encadeadas

25

Listas Duplamente Encadeadas

26

27

Anda mungkin juga menyukai