7.5. Utilisation d'un élément sans données

Comme on l'a vu dans un bon nombre des exemples précédents, la prise en compte de la chaîne vide nécessite généralement un traitement particulier (modification du pointeur "Debut" . . .). Pour éviter de devoir traiter ce cas particulier on peut envisager de "sacrifier" un élément de la chaîne à seule fin de ne jamais avoir le pointeur "Debut" à nil. Cet élément ne contient pas de donnée et doit rester en fin de chaîne. L'initialisation d'une chaîne à vide se fait, en conséquence, de la manière suivante (pour une chaîne monodirectionnelle):
  new(Debut);
  Debut^.Suivant := nil;
De la même manière, le test d'une chaîne vide se fera de la manière suivante :
  if Debut^.Suivant=nil then {chaîne vide}
Avec cette méthode, le premier algorithme de suppression d'un élément donné que nous avons vu au paragraphe 2 (SuppressionMilieu) n'a plus de restriction de fonctionnement puisque le dernier élément de la chaîne a contenir des données ne se trouve pas en dernière position de la chaîne.

Cette méthode peut aussi être appliquée aux structures d'anneaux mono- et bidirectionnels et aux chaînes bidirectionnelles. Quelle que soit la structure et l'opération, il faudra juste faire attention à ne pas appliquer de traitement à ce dernier élément, qui est d'ailleurs facilement reconnaissable de par sa position à l'extrémité de la structure.

Le test de structure vide est le même pour les chaînes bidirectionnelles que pour les chaînes monodirectionnelles. Pour les anneaux, ce test doit être légèrement adapté :

  if Debut^.Suivant=Debut then{anneau vide}
Les modifications à apporter aux différents algorithmes vus tout au long de ce chapitre sont laissés à la perspicacité du lecteur.

7.6. Structures auxiliaires: Piles, files d'attente, files circulaires

Table des matières.