0% ont trouvé ce document utile (0 vote)
64 vues8 pages

Liste doublement chainée en C++

Nous allons créer une liste doublement chainée dynamique de points caractérisés par des coordonnées et une couleur. Cette application nous permettra d'implémenter des fonctions pour ajouter, modifier, supprimer et afficher des points.

Transféré par

Akram Zouitni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
64 vues8 pages

Liste doublement chainée en C++

Nous allons créer une liste doublement chainée dynamique de points caractérisés par des coordonnées et une couleur. Cette application nous permettra d'implémenter des fonctions pour ajouter, modifier, supprimer et afficher des points.

Transféré par

Akram Zouitni
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Compte rendu Microprojet

C++

ZOUITNI Akram Berik


M. EL WAFIQ

Compte rendu 1

Résumé

Nous allons utiliser le langage C++ pour créer une structure de données
dynamique représentant une liste doublement chainée de points en couleurs.
Chaque point sera caractérisé par ses coordonnées x et y ainsi qu'une couleur
associée sur un plan. Cette application nous permettra de consolider nos
connaissances en programmation orientée objet à travers l'implémentation de
fonctions permettant d'ajouter, modi er, supprimer et visualiser des points
dans la liste.

Pour créer une liste doublement chainée de points dynamiques :

Créer une classe Point

la classe Point doit avoir des membres privés pour stocker les coordonnées x
et y ainsi que la couleur du point. La classe doit également avoir des
membres publics pour accéder et modi er ces attributs.

Compte rendu 2

fi
fi
Créer une classe PointList

La classe PointList contient une structure imbriquée privée appelée


Node qui représente un nœud dans la liste. Chaque nœud contient un
pointeur vers un objet Point, ainsi que des pointeurs vers le nœud suivant
et le nœud précédent dans la liste. Le constructeur de la structure Node
initialise le pointeur de point sur l'objet Point et les pointeurs next et
prev sur nullptr.

La classe PointList contient également trois membres privés :

• head qui pointe vers le premier nœud dans la liste ;


• tail qui pointe vers le dernier nœud dans la liste ;
• size qui représente la taille de la liste.
Le constructeur par défaut de PointList initialise les pointeurs head et
tail sur nullptr et la taille sur 0.

Le destructeur de la classe PointList est chargé de libérer la mémoire


allouée pour chaque nœud de la liste. Pour cela, il parcourt la liste à partir de
la tête (premier nœud) en utilisant une boucle while, en supprimant chaque
nœud à chaque itération et en avançant à la position suivante dans la liste
jusqu'à atteindre la n (nœud tail).

Compte rendu 3
fi
La fonction permettant d’ajouter un point dynamique à cette liste :

Voici le fonctionnement de cette fonction :

1. La méthode prend en argument un pointeur vers un objet Point que


l'on souhaite ajouter à la liste.
2. Un nouveau nœud de la liste est créé en allouant dynamiquement de la
mémoire pour le pointeur Node.
3. La valeur du pointeur point de la structure Node est initialisée avec
le pointeur d'objet Point passé en argument.
4. Si la liste est vide (c'est-à-dire si head est nullptr), alors head et
tail sont tous deux initialisés pour pointer vers le nouveau nœud
créé.
5. Sinon, le nouveau nœud est ajouté à la n de la liste en reliant le nœud
précédent (tail) à newNode, et en mettant tail à jour pour pointer
vers le nouveau nœud.
6. La variable size est incrémentée pour re éter l'ajout du nouveau
nœud.
7. La méthode se termine.

Compte rendu 4
fi
fl
La fonction permettant de modi er un point dynamique de cette liste :

La fonction modifyPoint permet de modi er un point existant dans la


liste en le remplaçant par un nouveau point avec de nouvelles coordonnées et
une nouvelle couleur. Elle prend en entrée les coordonnées et la couleur du
nouveau point, ainsi que les coordonnées du point à modi er.

La fonction commence par rechercher le point à modi er en parcourant la


liste. Si le point n'est pas trouvé, elle retourne false.

Si le point est trouvé, elle crée un nouveau point avec les nouvelles
coordonnées et la nouvelle couleur, puis elle le remplace dans le nœud
correspondant en mettant à jour les pointeurs next et prev du nœud et de
ses voisins.

En n, la fonction retourne true pour indiquer que la modi cation a été


effectuée avec succès.

Compte rendu 5
fi
fi
fi
fi
fi
fi
La fonction permettant de supprimer un point dynamique de cette liste :

La fonction prend en paramètre un pointeur vers le point à supprimer de la


liste. Elle parcourt la liste à la recherche du nœud contenant ce point. Si le
point est trouvé, on met à jour les liens entre les nœuds précédents et suivants
pour contourner le nœud à supprimer. Si le nœud à supprimer est la tête, on
met à jour la tête de la liste. Si c'est la queue, on met à jour la queue. En n,
on supprime le nœud contenant le point, on décrémente la taille de la liste et
on sort de la fonction. Si le point n'est pas trouvé dans la liste, on lève une
exception.

Compte rendu 6

fi
La fonction permettant de visualiser un point dynamique de cette liste :

Cette partie de code correspond à la dé nition de la fonction


printPoints() de la classe PointList. Cette fonction permet
d'af cher les coordonnées de tous les points présents dans la liste.

Plus précisément, la fonction commence par af cher un message indiquant


qu'elle va af cher la liste des points : std::cout << "List of
points:\n";.

Ensuite, la fonction parcourt la liste des points en utilisant une boucle


while. Elle commence par initialiser un pointeur current à la tête de la
liste : Node* current = head;.

La boucle continue tant que le pointeur current ne pointe pas vers un


nœud nul, c'est-à-dire que la liste n'a pas été entièrement parcourue. Pour
chaque nœud de la liste, la fonction af che les coordonnées du point
correspondant en utilisant l'opérateur èche (->) pour accéder aux membres
x et y du point : std::cout << "(" << current->point->x <<
", " << current->point->y << ")\n";.

En n, à chaque tour de boucle, la fonction met à jour le pointeur current


pour qu'il pointe sur le nœud suivant dans la liste : current =
current->next;.

Ainsi, après l'exécution de cette fonction, l'utilisateur pourra visualiser les


coordonnées de tous les points stockés dans la liste.

Compte rendu 7
fi
fi
fi
fl
fi
fi
fi
Cette partie correspond à la fonction main du programme. Tout d'abord, une
instance de la classe PointList est créée en utilisant son constructeur par
défaut. Ensuite, trois objets de la classe Point sont créés en utilisant leur
constructeur prenant deux arguments (les coordonnées x et y du point). Ces
points sont ajoutés à la liste à l'aide de la méthode addPoint de la classe
PointList.

Ensuite, la méthode printPoints est appelée pour af cher tous les points
actuellement stockés dans la liste.

Ensuite, la méthode removePoint de la classe PointList est utilisée


pour supprimer le point p2 de la liste.

Puis, la méthode printPoints est de nouveau appelée pour af cher la


liste mise à jour.

En n, les objets de la classe Point sont supprimés à l'aide de l'opérateur


delete pour libérer la mémoire allouée dynamiquement. La fonction main
retourne la valeur 0, indiquant que le programme s'est exécuté correctement.

Compte rendu 8
fi
fi
fi

Vous aimerez peut-être aussi