next up previous contents
Next: Pointeurs et références Up: Les pointeurs Previous: Pointeurs et structures

Listes chaînées

 

Une utilisation particulièrement intéressante des pointeurs associés aux structures est la définition de structures dites chaînées, dont l'exemple le plus simple est la liste chaînée. On pourra généraliser cet exemple aux arbres et aux graphes.

L'idée est de réserver un champ dans chaque cellule de liste pour pointer sur la cellule suivante de la liste.

Une liste est ainsi représentée par le pointeur sur sa première cellule.

La liste vide, ou la fin de liste, sera représentée par le pointeur NULL.

Voici les déclarations de type nécessaires à la définition d'une structure de liste de flottants en double précision (double) :

ex784

Noter que pour désigner le type du champ Suivant, il est nécessaire de faire apparaître le nom ``provisoire'' de la structure (TmpCellule) au début de la définition, après le mot-clé struct.

Noter également que, comme le type Cellule n'a pas à cet endroit reçu de définition complète, il faut dans la définition du champ Suivant employer la syntaxe :

  struct nom_provisoire * nom_champ;

Le lecteur attentif aura certainement relevé la redondance des types PtrCellule et Liste, qui sont en effet strictement équivalents. Cette redondance est volontaire, elle permet d'améliorer la lisibilité en distinguant les pointeurs de cellule (utilisés pour pointer une cellule isolée ou une cellule particulière, par exemple lors d'une construction ou d'un parcours de liste) et les pointeurs de liste, qui, pointant effectivement sur la première cellule de la liste, permettent indirectement l'accès à la liste entière.

Voici pour terminer un exemple simplifié de construction et d'affichage d'une liste composée de deux cellules. Il ne sera pas tenu compte de la possibilité d'erreur lors de l'allocation (voir exemple gif) ni de la libération de mémoire (voir section gif).

ex791



Michel COUPRIE
Thu Sep 12 14:57:14 METDST 1996