Liste doublement chainée

Bonjour,

Je dois implémenter une liste doublement chainée, y a t'il des exemples fiable + des explications sur les pointeurs etc?

Je ne sais pas très bien par ou commencer

Merci

2 réponses

  1. Modérateur
    Bonjour,

    "des explications sur les pointeurs"
    Il n'y a pas de pointeurs en Java...

    "y a t'il des exemples fiable"
    Voici une structure de liste qui devrait fonctionner :

    public class ListeDoublementChainee<E> {
        private Chaine<E> premiere, derniere;
    
        private class Chaine<E> {
            private E element;
            private Chaine<E> precedente, suivante;
        }
    }

    La confiance n'exclut pas le contrôle
    1. Merci, et comment je rajoute une chaine sans perdre la référence vers la suivante ou la précédente?
    2. Modérateur
      C'est la chaîne suivante qui portera la référence sur la chaîne précédente (et réciproquement), c'est le principe de la liste chaînée.
    3. Je pense avoir compris, cependant je ne suis pas sur de ma logique, qu'en pense tu de cette méthode?

      	public void insererEnTete(E element) { 
      		Chaine n = new Chaine(null, element, null);
      		n.precedent = tete.suivant;
      		n.suivant = queue.precedent;
      		tete.suivant = n;
      		queue.precedent = n;
      		numVersion++;
      		taille++;
      	}
    4. Modérateur
      n.precedent = tete.suivant;
      n.suivant = queue.precedent;
      Cela veut dire que n est à la fois le suivant de la tête et le précédent de la queue, c'est à dire qu'il est au milieu des deux ? Ça ne peut pas être correct.

      Quelques remarques/questions ?
      • Pourquoi mettre null dans
        new Chaine(null, element, null);
        si c'est pour après affecter les valeurs
        n.precedent
        et
        n.suivant
        ?
      • En terme de nommage
        tete
        et
        queue
        sont de mauvais choix car cela correspond au vocabulaire des files, pas des listes.
      • Il te manque les cas initiaux, que se passe-t-il si
        queue
        ou
        tete
        sont null ?
      • À quoi sert
        numVersion
        ?

      Il faudrait que tu testes ton code, tu peux commencer par faire la méthode
      toString()
      de la liste, ça te sera utile pour l'afficher et voir ses modifications successives.
    5. J'utilise
      numVersion
      pour un itérateur que j'implémente également.
      J'ai fais un
      toString()
      , au départ après 2 insertions javai bien
      taille == 2
      mais mon toString n'affichai que le dernier element de ma liste.

      Exemple: insere "a" puis "insere "b"
      Je fais
      liste.toString()
      et il m'affiche uniquement "b"
      Maintenant après modification il m'affiche plus rien

       public void insererEnTete(E element) {
        Chaine n = new Chaine(tete, element, tete.suivant);
        n = tete.suivant;
        numVersion++;
        taille++;
       }


      J'ai également mis au début et à la fin une chaine "bidon" sur laquelle la tete pointe histoire de ne jamais avoir de cas null quand j'ajoute un élément.