Solution de l’exercice 6.4

Voici une solution possible :

liste::~liste()// destructeur de la liste : supprime tous les noeuds{     if (!nombre) return;     while (--nombre) delete courant->suivant();     delete courant;}void liste::avance(int combien)// avance du nombre indiqué dans la liste{     if (courant)     if (combien > 0)         while (combien--)             courant = courant->suivant();     else     if (combien < 0)         while (combien++)             courant = courant->precedent();}void liste::affiche(unsigned combien)// affiche combien éléments de la liste// (et nombre_elt au max){     if (combien > nombre) combien = nombre;     while (combien--) {         cout << '\t' << courant->contenu();         courant = courant->suivant();         }     cout << '\n';}liste::liste(int n, const element* etab)// construit une liste de n éléments pointés par  etab{     nombre = 0; courant = 0;     if ( (n <= 0) || (!etab) ) return;     noeud* np = 0;     while ( (np = new noeud(*etab++, courant = np))              && (++nombre < n) );     if (np) courant = np->suivant();}inline int liste::insere(const element&  e)// insère e à la position courante;// renvoie 0 si plus de place{     noeud *np = new noeud(e, courant->precedent());     if (np) { courant = np; nombre++; return 1; }     else return 0;}void liste::supprime(int n)// supprimer le nombre indiqué d'éléments de la  liste{     if (n >= nombre) n = nombre;     while (n-- > 0) {         courant = courant->suivant();         delete courant->precedent();         nombre--;         }     if (nombre == 0) courant = 0;}

Noter comme le constructeur et le destructeur de noeud simplifient la tâche, en particulier dans insere et supprime.


Retour au texte.