Institut National des Postes et Télécommunications
1/2
Structures de données & analyse des algorithmes
TP1
Introduction
L’objectif de ce premier TP est de vous familiariser avec les structures de données liste, file, pile et
arbre binaire tout en utilisant le langage orienté objet C++. Pour ce faire, on vous demande d’abord
d’étudier et réaliser les exemples de C++ disponibles sur la page web http://3w.inpt.ac.ma/~poo
Description
Les listes, les files, les piles et les arbres binaires sont des structures de données très utilisées dans
le développement logiciel avec des applications diverses telles que les simulateurs de réseaux, les
systèmes d’exploitation, les systèmes de gestion des bases de données, les applications métiers, etc.
Une liste permet, au même titre qu’un tableau par exemple, de garder en mémoire des données en
respectant un certain ordre et d’en faire des traitements (ajouter, enlever, consulter …). Une file est
conçue comme étant une collection d’éléments organisée de telle sorte que l’ajout des éléments se
fait toujours à la fin de l’ensemble liste tandis que le retrait (la suppression) des éléments s’effectue
toujours à partir du début de la collection. Elle peut être implémentée en C++ par une liste chainée
où les éléments sont donnés sous formes de nœuds connectés entre eux à l’aide des pointeurs. Dans
sa forme basique, un nœud est généralement formé de deux champs : une information d’un certain
type et un pointeur vers le nœud suivant. Une pile est similaire à une file sauf que l’ajout et la
suppression des éléments se font de la même extrémité. Un arbre binaire, tel qu’il est vu dans le
cours, est une structure de données consistant en une collection de nœuds reliés entre eux par la
relation père/fils. Un arbre binaire a un seul nœud racine (n’ayant pas de parent) qui sert d’accès à
l’ensemble de l’arbre, un ou plusieurs nœuds feuille et un ou plusieurs nœuds internes. Dans un
arbre binaire, un nœud est formé de trois compartiments pour contenir une information de
quelconque type, un pointeur vers le fils gauche et un pointeur vers le fils droit. Un nœud d’un arbre
binaire est dit feuille si son fils gauche et son fils droit sont nuls ; par contre, un nœud est qualifié
de nœud interne si au moins un des ses fils (gauche ou droit) est non nul. Parmi les types d’arbres
binaires les plus utilisés, on trouve les arbres binaires de recherche et les tas («heap» en anglais) qui
peuvent être définis comme suit. Un arbre binaire de recherche (BST : Binary Research Tree) est un
arbre binaire dans lequel l’information contenue dans chaque nœud est supérieure à toutes les
informations contenues dans son sous-arbre gauche et est inférieure à toutes les informations
stockées dans son sous-arbre droit (voir les notes de cours SVP). Un tas («heap» en anglais), quant
à lui, est un arbre binaire complet dont les éléments sont partiellement ordonnés (contrairement à un
ordre total pour un BST) : Il existe une relation d’ordre entre l’information contenue dans chaque
nœud et les informations stockées dans ses fils. On parle d’un min-heap si l’information de chaque
nœud est inférieure ou égale à celles de ses fils et d’un max-heap si l’information de chaque nœud
est supérieure ou égale à celles de ses fils. Notons qu’un heap est facilement implémentable par un
tableau dynamique.
Dans ce TP, on vous demande de réaliser les taches suivantes :