FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C++ débutant] Liste chaînée qui marche pas :/

 




Le salon de discussion : ratur Godet Ln2 et Azote liquide : Xyala, 3 utilisateurs anonymes et 7 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ débutant] Liste chaînée qui marche pas :/

n°6625
ParadoX
B l a c k M e t a l
Posté le 11-02-2006 à 17:01:13  profilanswer
 

Bonjour,  
 
Dans le cadre d'un projet C++ pour la Fac, j'ai besoin de manipuler une Liste chainée d'objets. Pour commencer, je me suis dit que je vais tester avec une liste chaînée de Int avant d'attaquer de suite avec les objets.  
 
Mes classes:
 
liste.h

Code :
  1. #ifndef _Liste_h
  2. #define _Liste_h
  3. #include <iostream.h>
  4. class Liste
  5. {
  6. private:
  7.  class Node
  8.  {
  9.   friend class Iterateur;
  10.   friend class Liste;
  11.   public:
  12.    Node();
  13.    
  14.   private:
  15.    int valeur;
  16.    Node *suivant;
  17.    Node *precedent;
  18.  };
  19.  Node *tete;
  20.  Node *queue;
  21.  int nbElements;
  22. public:
  23.  Liste();
  24.  ~Liste();
  25.  int getNbElements() const;
  26.  void incNbElements();
  27.  bool estVide() const;
  28.  void ajoutFin(int);
  29.  void ajouterTete(int);
  30.  void supprimerTete();
  31.  void supprimerQueue();
  32.  int valeurTete() const;
  33.  int valeurQueue() const;
  34.  friend class Iterateur;
  35. };
  36. #endif


 
iterateur.h

Code :
  1. #ifndef _Iterateur_h
  2. #define _Iterateur_h
  3. #include <iostream.h>
  4. class Iterateur
  5. {
  6. friend class Liste;
  7. private:
  8.  Liste::Node **actuel;
  9.  Liste *liste;
  10. public:
  11.  Iterateur(Liste & );
  12.  ~Iterateur();
  13.  void avance();
  14.  void recule();
  15.  void retourTete();
  16.  int  valeur() const;
  17.  void ajouter(int);
  18.  void supprimer();
  19.  bool iterFin() const;
  20. };
  21. #endif


 
liste.cpp: (inachevé)

Code :
  1. #include "liste.h"
  2. #include "iterateur.h"
  3. // Constructeur de la liste
  4. Liste::Liste()
  5. {
  6. this->tete = NULL;
  7. this->queue = NULL;
  8. this->nbElements = 0;
  9. }
  10. // Constructeur par défaut du noeud
  11. Liste::Node::Node()
  12. {
  13. this->suivant = NULL;
  14. this->precedent = NULL;
  15. this->valeur = NULL;
  16. }
  17. // Destructeurs
  18. Liste::~Liste()
  19. {
  20. }
  21. //Methodes
  22. //La liste est-elle vide ?
  23. bool Liste::estVide() const
  24. {
  25. if(this->tete == NULL) return true;
  26. else return false;
  27. }
  28. //Ajout en tête de Liste
  29. void Liste::ajouterTete(int maValeur)
  30. {
  31. //Creation et remplissage du nouveau noeud
  32. Node *nouv = new Node();
  33. nouv->valeur = maValeur;
  34. nouv->suivant = tete;
  35. nouv->precedent = NULL;
  36. //2 cas: La liste est vide, ou elle ne l'est pas
  37. if(!estVide())
  38. {
  39.  tete = nouv;
  40. }
  41. else
  42. {
  43.  tete = nouv;
  44.  queue = nouv;
  45. }
  46. this->nbElements ++;
  47. }
  48. //Ajout en fin de Liste
  49. void Liste::ajoutFin(int maValeur)
  50. {
  51. Node *nouv = new Node();
  52. nouv->valeur = maValeur;
  53. nouv->suivant = NULL;
  54. if(!estVide())
  55. {
  56.  queue->suivant = nouv;
  57.  nouv->precedent = queue;
  58.  queue = nouv;
  59. }
  60. else
  61. {
  62.  tete = nouv;
  63.  queue = nouv;
  64.  nouv->precedent = NULL;
  65. }
  66. this->nbElements ++;
  67. }
  68. //Nombre d'elements dans la liste
  69. int Liste::getNbElements() const
  70. {
  71. return this->nbElements;
  72. }
  73. //Incremenatation du nombre d'elements dans la liste
  74. void Liste::incNbElements()
  75. {
  76. this->nbElements ++;
  77. }
  78. //Valeur de la tête
  79. int Liste::valeurTete() const
  80. {
  81. if(!estVide())
  82.  return tete->valeur;
  83. else
  84.  throw -1;
  85. }
  86. //Valeur de la Queue
  87. int Liste::valeurQueue() const
  88. {
  89. if(!estVide())
  90.  return queue->valeur;
  91. else
  92.  throw -1;
  93. }
  94. //Suppression de la tête
  95. void Liste::supprimerTete()
  96. {
  97. }


 
et iterateur.cpp:
 

Code :
  1. #include "liste.h"
  2. #include "iterateur.h"
  3. //Constructeur de l'iterateur
  4. Iterateur::Iterateur(Liste &maListe)
  5. {
  6. this->actuel = &(maListe.tete);
  7. this->liste = &maListe;
  8. }
  9. //Destructeur
  10. Iterateur::~Iterateur()
  11. {
  12. //rien à faire
  13. }
  14. //Méthodes
  15. //Retour de la valeur contenue dans le node actuelle
  16. int Iterateur::valeur() const
  17. {
  18. return (**actuel).valeur;
  19. }
  20. //Fait avancer l'iterateur
  21. void Iterateur::avance()
  22. {
  23. this->actuel = &((*(*actuel)).suivant);
  24. }
  25. //Fait reculer l'iterateur
  26. void Iterateur::recule()
  27. {
  28. this->actuel = &((*(*actuel)).precedent);
  29. }
  30. //Ajoute un element dans la liste
  31. void Iterateur::ajouter(int maValeur)
  32. {
  33. Liste::Node *nouv = new Liste::Node();
  34. nouv->suivant = (*(*actuel)).suivant;
  35. nouv->precedent = (*actuel);
  36. ((*(*actuel)).suivant)->precedent = nouv;
  37. (*(*actuel)).suivant = nouv;
  38. Liste::incNbElements();    // ------------> C'est ici que ça foire ! Voir plus bas
  39. }


 
Problème:
 
Je ne comprends pas pourquoi celui-ci ne va pas:
 

Code :
  1. //Incremenatation du nombre d'elements dans la liste
  2. void Liste::incNbElements()
  3. {
  4. this->nbElements ++;
  5. }


 
C'est un peu comme une méthode Get/Set: Elle devrait avoir accès au nbElements de la liste courante, qui lui est une donnée membre de la classe Liste.
 

Code :
  1. class Liste
  2. {
  3. private:
  4.  class Node
  5.  {
  6.                    ...
  7.  };
  8.  Node *tete;
  9.  Node *queue;
  10.  int nbElements;


 
Pour le int getNbElements() const; , je fais bien référence à nbElements (sans le modifier, bien entendu), et il me retourne bien celui de la liste courante :/
 
 :sweat:


---------------
Hitman for real - TrueCrypt, the topic - Blog
mood
Google
Posté le 11-02-2006 à 17:01:13  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Langage haut niveau(C, Pascal...)


  [C++ débutant] Liste chaînée qui marche pas :/

 

Hit Parade