struct Element { int _val; Element * _suivant; };
Le canevas de notre classe PileE est le suivant :
class PileE { private: Element * _psommet; public: PileE(); void Empiler(int x); void Depiler(); int Sommet(); int Est_vide(); };
Le champ psommet contient l'adresse du premier bloc (la tête) de la pile.
class PileE { private: class Element { public: int _val; Element * _suivant; Element(int v =0, Element * s =0) {_val = v; _suivant = s;} }; Element * _psommet; public: PileE(); void Empiler(int x); void Depiler(); int Tete(); int Est_vide(); };
Maintenant Element est un sous-type de PileE; étant dans la partie private, il n'est visible que depuis les fonctions membres de PileE, et son nom complet est PileE::Element.
Redéfinir les fonctions membres de PileE.
class FileE { private: class Element { public: int _val; Element * _suivant; Element(int v =0) {_val = v; _suivant = 0;} }; Element * _pdernier; public: FileE(); void Ajouter(int x); void Supprimer(); int Tete(); int Est_vide(); };
Où _pdernier est un pointeur sur le dernier élément de la file (i.e. l'élément qui a été ajouté en dernier) qui pointe sur le plus ancien élément (la tête, le prochain à sortir) qui lui-même pointe sur le deuxième plus ancien etc. jusqu'au dernier.
L'usage de _dernier permet donc de récupérer facilement l'adresse de la tête de la file (il est donc inutile d'avoir un pointeur sur cet élément dans la structure de données).
Ecrire les fonctions de FileE.