//Noeud.h #include using namespace std; template <class T> class Liste; template <class T> class Iterateur; template <class T> class ListeIterateur; template <class T> class Noeud { T donne; Noeud<T> *suivant; public: friend class Liste<T>; friend class Iterateur<T>; friend class ListeIterateur<T>; Noeud(); Noeud(const T &, Noeud<T> *); T getdonne(){return donne;} ~Noeud();}; //Noeud.cpp #include "Noeud.h" template <class T> Noeud<T>::Noeud() { suivant = NULL;} template <class T> Noeud<T>::Noeud(const T &t, Noeud<T> *n) { donne = t; suivant = n;} template <class T> Noeud<T>::~Noeud() { delete suivant;} //Liste.h #include "Noeud.h" template <class T> class Iterateur; template <class T> class ListeIterateur; template <class T> class Liste { Noeud <T> *tete; public: friend class Iterateur<T>; friend class ListeIterateur<T>; Liste(); void Inserer_Element_Debut(T); int Supprimer_Element(T); int Liste_Vide(); void Afficher_Liste(); T* Construire_Tableau(T*); ~Liste(); protected: Noeud <T> *Creer_Noeud(T, Noeud <T> *);}; //Liste.cpp #include "List.h" template <class T> Liste<T>::Liste() { tete = NULL;} template <class T> void Liste<T>::Inserer_Element_Debut(T t) { Noeud<T> *N = new Noeud<T>(); N->suivant = tete; N->donne = t; tete = N;} template <class T> int Liste<T>::Supprimer_Element(T t) { if(tete->donne == t) { tete = tete->suivant; return 1;} else { Noeud <T> *N; N = tete; while(N->suivant->donne !t && N->suivant NULL) N = N->suivant; if(N->suivant == NULL) return 0; else { N->suivant = N->suivant->suivant; return 1;}}} template <class T> int Liste<T>::Liste_Vide() { if(tete) return 1; else return 0;} template<class T> void Liste<T>::Afficher_Liste() { Noeud<T> *N; N=tete; int i=1; while(N) { cout << "L'Elemnt Numero " << i << " De La Liste Est: "<< N->donne << endl; N = N->suivant; i++;}} template <class T> Noeud<T> *Liste<T>::Creer_Noeud(T t, Noeud<T> *N) { Noeud<T> n; n.donne(t); n.suivant(N); return n;} template <class T> T* Liste <T>::Construire_Tableau(T* t) { Noeud<T> *n; n = tete; int i=0; while(n) { n = n->suivant; i++;} T *tt; tt = new T[i]; n = tete; i=0; while(n) { tt[i] = n->donne; n = n->suivant;} return tt;} template <class T> Liste<T>::~Liste() { delete tete;} //Iterateur.h #include "List.h" template <class T> class Iterateur { public: virtual T operator ()() = 0; virtual void operator =(T) = 0; virtual int operator !() = 0; virtual void operator ++() = 0;}; //ListeIterature.h #include "Iterateur.h" #include using namespace std; template <class T> class ListeIterateur:public Iterateur <T> { Liste<T> reference; Noeud<T> *courant; Noeud<T> *precedent; public: ListeIterateur(Liste<T> &); ~ListeIterateur(); void Inserer_Avant(T); void Inserer_Apres(T); void Supprimer_Courant(); T operator ()(); void operator =(T); int operator !(); void operator ++(); void setcourant (Noeud<T> *n){courant = n;} Noeud<T>* getcourant(){return courant;}}; //ListeIterateur.cpp #include "ListeIterateur.h" template <class T> ListeIterateur<T>::ListeIterateur(Liste<T> &L) { reference = L; courant = reference.tete; precedent = NULL;} template <class T> ListeIterateur<T>::~ListeIterateur() { delete courant; delete precedent;} template <class T> void ListeIterateur<T>::Inserer_Avant(T t) { Noeud<T> *N; N = new Noeud<T>; N->donne = t; N->suivant = courant; if(precedent!=NULL) { precedent->suivant = N; precedent = precedent->suivant;} else { reference.Inserer_Element_Debut(t); precedent = reference.tete; courant = precedent->suivant;}} template <class T> void ListeIterateur<T>::Inserer_Apres(T t) { Noeud<T> *N; N = new Noeud<T>; N->suivant = courant->suivant; courant->suivant = N;} template<class T> T ListeIterateur<T>::operator()() { return courant->donne;} template<class T> void ListeIterateur<T>::operator=(T t) { courant->donne = t;} template<class T> void ListeIterateur<T>::operator++() { precedent = courant; courant = courant->suivant;} template<class T> int ListeIterateur<T>::operator!() { Noeud<T> *N; if(precedent==NULL) { N = courant; courant = courant->suivant; delete N; return 1;} if(courant!=NULL) { N = courant; precedent->suivant = courant->suivant; courant = precedent->suivant; delete N; return 1;} return 0;} main.cpp #include "ListeIterateur.h" template <class T> ListeIterateur<T>::ListeIterateur(Liste<T> &L) { reference = L; courant = reference.tete; precedent = NULL; } template <class T> ListeIterateur<T>::~ListeIterateur() { delete courant; delete precedent; } template <class T> void ListeIterateur<T>::Inserer_Avant(T t) { Noeud<T> *N; N = new Noeud<T>; N->donne = t; N->suivant = courant; if(precedent!=NULL) { precedent->suivant = N; precedent = precedent->suivant; } else { reference.Inserer_Element_Debut(t); precedent = reference.tete; courant = precedent->suivant; } } template <class T> void ListeIterateur<T>::Inserer_Apres(T t) { Noeud<T> *N; N = new Noeud<T>; //N->suivant = t; N->suivant = courant->suivant; courant->suivant = N; } template<class T> T ListeIterateur<T>::operator()() { return courant->donne; } template<class T> void ListeIterateur<T>::operator=(T t) { courant->donne = t; } template<class T> void ListeIterateur<T>::operator++() { precedent = courant; courant = courant->suivant; } template<class T> int ListeIterateur<T>::operator!() { Noeud<T> *N; if(precedent==NULL) { N = courant; courant = courant->suivant; delete N; return 1; } if(courant!=NULL) { N = courant; precedent->suivant = courant->suivant; courant = precedent->suivant; delete N; return 1; } return 0; }
[...]Mais Toujours ça Fonctionne Pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question