#include #include "Liste.h" // Constructeur par defaut et/ou initialisation Liste:: Liste() { nbElem = 0;tete = NULL;queue = NULL; } // Destructeur Liste::~Liste() { Place p = premier(); Place q; while (p != NULL) {q = p; p = suivant(p);delete q;} } //--------------------methodes privees------------------- void Liste::setPremier(Place p) {tete=p;}; void Liste::setDernier(Place p) {queue=p;} void Liste::setSuivant(Place p, Place nouvSuiv) {p->setSuiv(nouvSuiv);} void Liste::setPrecedent(Place p, Place nouvPrec) {p->setPrec(nouvPrec);} //-----------------methodes publiques--------------------- //-----primitives Liste::Place Liste::premier()const {return tete;} Liste::Place Liste::dernier() const {return queue;} Liste::Place Liste::suivant(Place p)const {return p->getSuiv();} Liste::Place Liste::precedent(Place p)const {return p->getPrec();} //-----utilitaires bool Liste::estVide()const {return (tete == NULL);} int Liste::longueur()const {return nbElem;} //------operations courantes liees uniquement a la structure de la liste void Liste::ajoutApres(Place p, Place pCell) { if (estVide()){ setPremier(pCell);setDernier(pCell); } else{ setPrecedent(pCell,p); if (p==dernier()) { setSuivant(p,pCell);setDernier(pCell); } else { setSuivant(pCell,suivant(p)); setPrecedent(suivant(p),pCell); setSuivant(p,pCell); } } nbElem++; } void Liste::ajoutAvant(Place p, Place pCell) { if (estVide()){ setPremier(pCell);setDernier(pCell); } else{ setSuivant(pCell,p); if (p==premier()) { setPrecedent(p,pCell);setPremier(pCell); } else{ setPrecedent(pCell,precedent(p)); setSuivant(precedent(p),pCell); setPrecedent(p,pCell);} } nbElem++; } void Liste::enleve(Place p) { if (nbElem==1){ setPremier(NULL);setDernier(NULL); } else if (p==premier()) { setPremier(suivant(premier()));setPrecedent(premier(),NULL); setSuivant(p,NULL); } else if (p==dernier()){ setDernier(precedent(dernier()));setSuivant(dernier(),NULL); setPrecedent(p,NULL); } else { setSuivant(precedent(p),suivant(p)); setPrecedent(suivant(p),precedent(p)); setSuivant(p,NULL); setPrecedent(p,NULL); } nbElem--; } Liste::Place Liste::recherche(float d)const { Place cherche=tete; while(cherche!=queue) { if(cherche->getDate()>d) {return cherche;} cherche=suivant(cherche); } return queue; } void Liste::vider(){ Place p = premier();Place q; while (p != NULL) {q = p; p = suivant(p);delete q;} setPremier(NULL);setDernier(NULL);nbElem = 0; } void Liste::insere(Place p) { ajoutAvant(recherche(p->getDate()),p); }