I – Le fonctionnement des programmes.
Les deux programmes que nous avons écrits sont basés sur un schème
similaire. Les principales différences structurelles, mis à part évidemment ce que
nécessite la syntaxe du langage, concernent surtout la structure de données sous-
jacente à la mémorisation des données. Là où le programme en C utilise des listes
simplement chaînées, le programme en Java utilise lui des LinkedList, simplement
parce que la structure était déjà disponible, simple d'utilisation tout en ayant une
similitude avec notre liste simplement chaînée intéressante. Mais au niveau des objets
Java ou des struct de C, la forme est identique.
Ainsi, la parcelle d'information de base dans les deux environnements est la
Chaîne définie comme contenant un string (au sens de suite de caractères) et un
compteur de multiplicité. Chaque fois qu'on voudra ajouter une chaîne de caractère à
notre base de données, on vérifiera donc si elle est déjà présente dans la liste de toutes
celles déjà employées et si c'est le cas, on incrémentera simplement le compteur au lieu
d'en allouer une nouvelle. De même, au moment d'en effacer une, on vérifiera si la
multiplicité de celle-ci est supérieure à 1 avant de l'effacer complètement.
Les individus de l'annuaire quant à eux se trouvent à n'être que des structures
vides contenant uniquement des pointeurs/références vers les chaînes précédemment
stockées. Il est à noter qu'on pourrait être tenté en Java de ne pas conserver de
compteur dans la structure de la chaîne puisque de toute façon tant que l'élément est
référencé il est conservé et dès qu'il ne l'est plus il est libéré. Or on s'aperçoit que parce
qu'on a besoin de conserver dans une liste (...) les éléments afin de savoir si on a
besoin de créer ou pas la nouvelle chaîne (ou d'en retrouver l'adresse mémoire) celle-ci
resterait donc indéfiniment active si on ne savait pas quand l'exclure justement de ladite
liste.
Le problème qu'il reste à prévoir en C surtout est la lecture de l'information à
partir de la console. Comme on ne sait pas à l'avance la longueur de la chaîne de
caractère qui sera reçue, on doit donc la lire petit à petit, en affectant, par petit bloc
d'espace, à nouveau dans une liste chaînée, les caractères lus. À la fin de la lecture
d'une chaîne, l'adresse de celle-ci sera finalement stockée dans la liste des struct
chaine.