Lista duplamente encadeada circular?

9 respostas
J

Olá pessoal eu tenhu q fazer uma lista duplamente encadeada circular para guarda o nome e tres notas de um aluno…

A minha pergunta é a seguinte: Como funciona a tal da lista duplamente encadeada circular???

alguém pode dar um exemplo?!

abraço!

9 Respostas

Z

Eh uma lista duplamente encadeada, isto eh, um noh da lista possui um ponteiro tanto pro proximo quanto pro noh anterior. E eh circular pelo fato de que o ponteiro ‘proximo’ do ultimo noh aponta para o primeiro e o ponteiro ‘anterior’ do primeiro aponta para o ultimo noh.

Desse modo voce tem um ciclo quando pecorre a lista em qualquer sentido, isso eh uma lista duplamente encadeada.

F

A -> B -> C -> D -> E -> A, o último elemento aponta para o primeiro, como o Zeh disse.

Agora você tem tentar fazer, é melhor que o pessoal mandar um algoritmo pronto e você não ter entendido.

G

Se for algum exercício para a faculdade, muito provavelmente será pedida a implementação em C ou C++. Pelo menos comigo foi assim :slight_smile:

Se você sabe trabalhar com ponteiros fica bem tranquilo implementar a lista. Geralmente a dificuldade é essa.

F

Em Java isso é feito usando classes auto-referenciáveis.

Nada mais é do que você colocar um objeto “proximo” e um objeto “anterior” do mesmo tipo da classe dentro da própria classe.

Por exemplo, se eu tiver a classe No (que representa um nó da milha lista), dentro dela eu terei:

No anterior; No proximo;
Se essa lista tiver apenas um elemento, anterior = proximo = this.

Se tiver mais de um elemento, o próximo do último será o primeiro, e o anterior do primeiro será o último.

Você pode guardar uma referência ao primeiro objeto que foi inserido (e ao último), mas sendo uma lista circular duplamente encadeada você não precisa ter início nem fim… você só precisa ter uma referência a um objeto da lista, senão não conseguirá acessá-la.

Todos esses nós serão gerenciados e manipulados dentro de uma classe Lista, por exemplo, e essa classe é que possuirá o objeto que vai referenciar um dos nós (que pode ser o primeiro ou não, conforme você queira).

À medida que você desenvolver a sua lista, poste as dúvidas pra gente ir dando uns toques, há diversos detalhes a serem ditos, além desse básico.

J

Fox McCloud:
Em Java isso é feito usando classes auto-referenciáveis.

Nada mais é do que você colocar um objeto “proximo” e um objeto “anterior” do mesmo tipo da classe dentro da própria classe.

Por exemplo, se eu tiver a classe No (que representa um nó da milha lista), dentro dela eu terei:

No anterior; No proximo;
Se essa lista tiver apenas um elemento, anterior = proximo = this.

Se tiver mais de um elemento, o próximo do último será o primeiro, e o anterior do primeiro será o último.

Você pode guardar uma referência ao primeiro objeto que foi inserido (e ao último), mas sendo uma lista circular duplamente encadeada você não precisa ter início nem fim… você só precisa ter uma referência a um objeto da lista, senão não conseguirá acessá-la.

Todos esses nós serão gerenciados e manipulados dentro de uma classe Lista, por exemplo, e essa classe é que possuirá o objeto que vai referenciar um dos nós (que pode ser o primeiro ou não, conforme você queira).

À medida que você desenvolver a sua lista, poste as dúvidas pra gente ir dando uns toques, há diversos detalhes a serem ditos, além desse básico.

Tem como posta um exemplo?

F

Por que você não tenta fazer antes ?
As idéias já foram apresentadas, agora coloca o cérebro pra funcionar!

Z

No livro Java Como Programar, tem um capítulo só de Estruturas de Dados…

G

Boa zirocool!

Não estava nem lembrando disso…

B

duplamente encadeada eh assim

A <-> B <-> C <-> D <-> … <-> A

Criado 12 de maio de 2006
Ultima resposta 15 de mai. de 2006
Respostas 9
Participantes 7