La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Structures de données IFT-2000

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000"— Transcription de la présentation:

1 Structures de données IFT-2000
Abder Alikacem Les listes ordonnées Programmation générique en C++ Semaine 3 Édition Septembre 2009 Département d’informatique et de génie logiciel

2 Laboratoire #3 Implantation d’une liste ordonnée
Nous vous fournissons 3 packetages, un par projet/implantation que vous devez faire: tableau dynamique liste doublement chaînée liste circulaire Uniquement ceci pour cette semaine Dans chacun d'eux, vous devez compléter le fichier .inl étant donné le modèle d'implantation décrit dans la partie privée de la classe Liste. Bien entendu, les 3 implantations demandées doivent être génériques. Ces 2 main() fournis sont pour tester les 3 packetages (séparément), un main() pour instancier une liste ordonnée d'entiers et un autre pour déclarer une liste d'objets définis dans la classe ClasseTests.h que nous vous fournissons également.

3 Liste ordonnée Implantation dans un tableau dynamique
Un tableau alloué du monceau (tas ou heap) Taille décidé par l’utilisateur #include <iostream> # include <stdexcept> using namespace std; #pragma warning( disable : 4290 ) template <typename T> class Liste { public: //… private: int tailleMax; // taille maximum de la liste int cpt; // cardinalité de la liste T * tab; // tableau "dynamique" contenant les éléments de la liste } ; #include "Liste.inl"

4 Gestion du tableau dynamique
Il faut donc modifier le constructeur d’une liste: allouer un tableau sur le tas et dont le pointeur sera assigné à au membre privé tab. template <typename T> Liste<T>::Liste (int max) throw(bad_alloc) { tailleMax=max; cpt = 0; tab = new T [tailleMax]; } Le destructeur de la liste : Libération de l’espace du tableau pointé par tab Constructeur template <typename T> Liste<T>::~Liste () // Destructeur { delete [] tab ; cpt = tailleMax = 0; } Destructeur

5 Gestion du tableau dynamique
Il ne faut pas oublier le constructeur de copie: allouer un tableau sur le tas et dont le pointeur sera assigné à au membre privé tab puis copier de l’instance source template <typename T> Liste<T>:: Liste(const Liste<T>& source) throw (bad_alloc) { tailleMax = source.tailleMax; cpt= source.cpt; tab = new T [tailleMax]; for (int position =0; position < source.cpt; ++position) tab[position]= source.tab[position]; } Constructeur de copie

6 Gestion du tableau dynamique
et la surcharge de l’opérateur = allouer un tableau sur le tas et dont le pointeur sera assigné à au membre privé tab puis copier de l’instance source, ne pas oublier de nettoyer… template <typename T> Liste<T>& Liste<T>::operator = (const Liste<T>& l) throw(bad_alloc) { if (tab!=0) delete [] tab; //nettoyer ... tab=new T [l.tailleMax]; for (int i=0; i< l.cpt; i++) tab[i]=l .tab[i]; tailleMax=l.tailleMax; cpt=l.cpt; return (*this); } Surcharge de l’opérateur =


Télécharger ppt "Structures de données IFT-2000"

Présentations similaires


Annonces Google