Duplamente encadeada Circular

Pessoal ,

dei uma olhada aqui no forum mesmo procurando os conceitos de
uma LISTA DUPLAMENTE ENCADEADA CIRCULAR e entendi o que se
passa com a estrutura.

Vou começar a implementar uma aqui e queria saber se uso ou não
uma Célula sentinela ou se faria alguma diferença a sentinela para
manter os elementos desta lista com algum tipo de ordenação !

Ae,

Pelo o que eu lembro de listas, é bom usar a sentinela nesses casos pra vc saber onde começa/termina a lista…
Se você precisar percorrer a lista toda por exemplo, você vai saber que deve parar quando você achar a sentinela

[quote=Odyo]Pessoal , s

dei uma olhada aqui no forum mesmo procurando os conceitos de
uma LISTA DUPLAMENTE ENCADEADA CIRCULAR e entendi o que se
passa com a estrutura.

Vou começar a implementar uma aqui e queria saber se uso ou não
uma Célula sentinela ou se faria alguma diferença a sentinela para
manter os elementos desta lista com algum tipo de ordenação !
[/quote]

Uma lista circular não tem inicio ou fim, certo?

Você poderia ter um sentinela que funcionaria como um iterator, apenas para marcar sua posicão atual na lita, caso deseje, por exemplo, fazer inserções de maneira ordenada.

Neste caso a sentinela teria um valor válido ?

Não entendi o que você quis dizer com valor válido, mas acho que, para que um nó exista na sua lista, o mesmo deve ser não nulo, certo? logo, qualquer nó apontado pela sentinela teria um valor válido.

contrutor …

public ListaCircular() { }

e aqui o método pra adicionar um elemento …

[code]/**
* Adiciona um elemento logo após a Sentinela
*/
public void adiciona (Object x)
{
NO aux = new NO(x);

    if ( vazia() )
    {
        sentinela = aux;
        sentinela.anterior = sentinela;
        sentinela.proximo = sentinela;
    }
    
    // caso apenas um elemento na estrutura
    else if (sentinela.proximo == sentinela)
    {
        aux.proximo = sentinela.proximo;
        aux.anterior = sentinela;
        
        sentinela.proximo = aux;
        sentinela.anterior = aux;
    }
    
    // caso de mais de um elemento na estrutura
    else
    {
        aux.proximo = sentinela.proximo;
        aux.anterior = sentinela;
        
        sentinela.proximo = aux;
        aux.proximo.anterior = aux;
    }
} // adiciona no inicio da estrutura[/code]

Não sei se está certo …acho que escrevi vcoisas demais … :?
grato pela ajuda cassio