Partage
  • Partager sur Facebook
  • Partager sur Twitter

Liste linéaire simplement liée

Sujet résolu
    9 mars 2008 à 19:06:44

    bonjour,
    je ne sais pas trop manipuler les listes chaînées(c'est vraiment mon point faible..d'ailleurs si qqun connait un bon livre pour ça, ça serait très gentil de sa part de me passer le titre)
    je vous demande svp de m'expliquer cet algorithme, et autre chose m'aider à faire la partie interface.(la fonction main)
    voici le fichier cpp:
    1. #include <iostream>
    2. #include "ListeSL.hpp"
    3. using namespace std;
    4. Liste::Elem::Elem(int info, Elem *suiv)
    5. {
    6.   this->info = info;
    7.   this->suiv = suiv;
    8. }
    9. Liste::Place Liste::Place::suivant() const
    10. {
    11.   return Place(elem->suiv);
    12. }
    13. int Liste::Place::info() const
    14. {
    15.   return elem->info;
    16. }
    17. bool Liste::Place::valide() const
    18. {
    19.   return (elem != NULL);
    20. }
    21. Liste::Place::Place()
    22. {
    23.   this->elem = NULL;
    24. }
    25. Liste::Place::Place(Elem *elem)
    26. {
    27.   this->elem = elem;
    28. }
    29. Liste::Place Liste::tete() const
    30. {
    31.   return Place(tetePtr);
    32. }
    33. int Liste::longueur() const
    34. {
    35.   int res = 0;
    36.   for (Place p = tete(); p.valide(); p = p.suivant())
    37.     ++res;
    38.   return res;
    39. }
    40. bool Liste::vide() const
    41. {
    42.   return !tete().valide();
    43. }
    44. Liste::Place Liste::insererEnTete(int i)
    45. {
    46.   tetePtr = new Elem(i, tetePtr);
    47.   return tete();
    48. }
    49. Liste::Place Liste::insererApres(Place p, int i)
    50. {
    51.   p.elem->suiv = new Elem(i, p.elem->suiv);
    52.   return p.suivant();
    53. }
    54. void Liste::supprimer(Place p)
    55. {
    56.   Elem *i = p.elem;
    57.   if (i == tetePtr)
    58.     tetePtr = tetePtr->suiv;
    59.   else
    60.   {
    61.     Elem *j = tetePtr, *k = NULL;
    62.     while (j != i)
    63.     {
    64.       k = j;
    65.       j = j->suiv;
    66.     }
    67.     k->suiv = i->suiv;
    68.   }
    69.   delete i;
    70. }
    71. Liste::Place Liste::trouver(int i) const
    72. {
    73.   Place p;
    74.   for (p = tete(); p.valide() && p.info() != i; p = p.suivant())
    75.     ;
    76.   return p;
    77. }
    78. Liste& Liste::operator=(const Liste &l)
    79. {
    80.   if (&l != this)
    81.   {
    82.     effacer();
    83.     copier(l.tete());
    84.   }
    85.   return *this;
    86. }
    87. Liste::Liste()
    88. {
    89.   tetePtr = NULL;
    90. }
    91. Liste::Liste(const Liste &l)
    92. {
    93.   copier(l.tete());
    94. }
    95. Liste::~Liste()
    96. {
    97.   effacer();
    98. }
    99. void Liste::effacer()
    100. {
    101.   while (!vide())
    102.     supprimer(tete());
    103. }
    104. void Liste::copier(Place p)
    105. {
    106.   if (p.valide())
    107.   {
    108.     insererEnTete(p.info());
    109.     p = p.suivant();
    110.   }
    111.   Place q = tete();
    112.   while(p.valide())
    113.   {
    114.     q = insererApres(q,p.info());
    115.     p = p.suivant();
    116.   }
    117. }

    et le fichier hpp
    1. class Liste
    2. {
    3.   class Elem
    4.   {
    5.   public:
    6.     Elem(int, Elem *);
    7.     int info;
    8.     Elem *suiv;
    9.   };
    10. public:
    11.   class Place
    12.   {
    13.   public:
    14.     friend class Liste;
    15.     Place suivant() const;
    16.     int info() const;
    17.     bool valide() const;
    18.     Place();
    19.   private:
    20.     Place(Elem *);
    21.     Elem *elem;
    22.   };
    23.   Place tete() const;
    24.   int longueur() const;
    25.   bool vide() const;
    26.   Place insererEnTete(int);
    27.   Place insererApres(Place, int);
    28.   void supprimer(Place);
    29.   Place trouver(int) const;
    30.   Liste& operator=(const Liste &);
    31.   Liste();
    32.   Liste(const Liste &);
    33.   ~Liste();
    34. private:
    35.   void effacer();
    36.   void copier(Place);
    37.   Elem *tetePtr;
    38. };
    • Partager sur Facebook
    • Partager sur Twitter
      10 mars 2008 à 23:37:47

      M'est avis que tu peux toujours tenter un petit coup d'oeil sur ce tuto ;-)

      Autrement, donnes le/les point d'algo qui restent sombres, que nous puissions les éclairer !
      • Partager sur Facebook
      • Partager sur Twitter
        11 mars 2008 à 8:17:57

        merci man, je savais pas qu'il y'a un tuto sur les listes chaînées. encore merci ^^
        • Partager sur Facebook
        • Partager sur Twitter
          13 mars 2008 à 22:04:10

          bonjour,
          vous pouvez me dire svp, comment je fais appel à la fonction insertionEnTete depuis la fonction main ???? merci
          • Partager sur Facebook
          • Partager sur Twitter

          Liste linéaire simplement liée

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown