1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| /*création d'une liste vide */
Liste::Liste():premier(NULL),dernier(NULL),nb_maillon(0)
{
}
/* n ne sera pas utilisé ;) */
Liste::Liste(int n, Maillon *list):premier(NULL),dernier(NULL)
{
/* nous allons créer une boucle qui va copier chacun des maillons
* reçu par le constructeur
*/
while(liste!=NULL)
{
/* on copie le maillon */
Maillon * temp=new Maillon(list->page);
/* C'est peut être le premier maillon */
if(!premier)
{
/* dans ce cas, temp est tout à la fois premier et dernier maillon */
premier=temp;
}
else
{
/* sinon, on lie le dernier maillon à temp */
dernier->suivant=temp;
/* et temp devient le dernier maillon */
}
/* et, bien sur, on incrémente le nombre de maillon */
dernier=temp;
++nb_maillon;
}
}
/* Le constructeur par copie travaille exactement de la meme manière:
* En effet, on ne peut pas se permettre de faire partager les maillons par
* plusieurs listes
*/
Liste::Liste(const Liste &right):premier(NULL),dernier(NULL),nb_maillon(0)
{
/* nous allons créer une boucle qui va copier chacun des maillons
* reçu par le constructeur
*/
Maillon list=right->premier;
while(list!=NULL)
{
/* on copie le maillon */
Maillon * temp=new Maillon(list->page);
/* C'est peut être le premier maillon */
if(!premier)
{
/* dans ce cas, temp est tout à la fois premier et dernier maillon */
premier=temp;
}
else
{
/* sinon, on lie le dernier maillon à temp */
dernier->suivant=temp;
}
/* et temp devient le dernier maillon */
dernier=temp;
/* et, bien sur, on incrémente le nombre de maillon */
++nb_maillon;
}
}
/* le destructeur s'occupe de détruire tous les maillons */
Liste::~Liste()
{
while(premier!=NULL)
{
/* on garde une trace de l'élément qui suit le premier maillon */
Maillon * temp=premier->suivant;
/* on libère la mémoire du premier maillon */
delete premier;
/* l'élément qui suivait le premier maillon devient premier maillon */
premier = temp;
}
}
/* Je te laisse du travail pour les opérateurs d'affectation et
* de comparaison, ainsi que les accesseurs simples ;)
*/
void Liste::ajouter(RA_Page rap)
{
/* je considère que, ici, on ajoute d'office en fin de liste ;)
* L'idéal serait toute fois d'avoir
* -AjouterDebut
* -AjouterFin
* -AjouterApres(element, a_ajouter)
* -éventuellement, pouvoir passer des Maillons directement comme
* surcharge de ces trois méthodes ;)
*/
/* on crée le nouveau maillon */
Maillon * temp=new Maillon(rap);
/*c'est peut etre le premier maillon de la liste */
if(!premier)
{
premier = temp;
}
else
{
dernier->suivant=temp;
}
dernier=temp;
++nb_maillon;
} |
Partager