Pour créer une liste, il faut commencer par son premier élément. Le premier élément est un pointeur auquel vous allez
allouer dynamiquement une zone mémoire. Il prendra la valeur que vous voulez, et son pointeur d’enregistrement
suivant recevra NIL. La fonction retourne un pointeur vers le premier élément de la nouvelle liste.
Fonction cree_liste():pointeur sur element
Var
pTete:pointeur sur element
Début
pTete←nouveau element
pTete→pSuiv ← NIL // (*pTete).pSuiv←NIL
Retoune pTete
FinFonc
Rappel : pTete→pSuiv ← NIL se lit ainsi : (*pTete).pSuiv←NIL, c’estàdire que le champ pSuiv de
l’enregistrement pointé par pTete reçoit la valeur NIL.
Cette fonction amène un premier commentaire. Dans le chapitre Les sousprogrammes vous avez appris la différence
entre les variables locales et globales. Ici pTete est une variable locale, elle sera détruite à la fin de la fonction.
Pourtant l’adresse qu’elle contient est retournée. C’est que le pointeur n’étant pas libéré, la zone mémoire allouée
dynamiquement l’est pour toute la durée du programme. À la sortie de la fonction, la zone mémoire existe encore et
donc son adresse est encore valide.
Remarquez que l’affectation de la valeur NIL à pSuiv n’est pas nécessaire car c’est sa valeur par défaut lors de la
déclaration de l’enregistrement structuré.
Pour exploiter cette fonction, il suffit de déclarer un pointeur, et lui affecter le résultat de celleci :
Programme liste1
Var
pTete:pointeur sur element
Début
pTete←cree_liste();
Fin
La fonction cree_liste est très simple. Peutêtre pourriezvous en profiter pour voir le mécanisme simple permettant
de rajouter des éléments les uns à la suite des autres. La fonction cree_liste2() modifiée va vous demander de saisir
en boucle des valeurs qui seront ajoutées les unes après les autres en fin de liste. Pour ceci vous aurez besoin de
conserver à chaque fois trois informations :
q Le pointeur pTete de la tête de la liste, qui devra être retourné par la fonction.
q Le pointeur pEncours de l’élément actuel de la liste, de l’élément rajouté en fait.
q Le pointeur pPrec de l’élément précédent, dont le pointeur pSuiv devra recevoir l’adresse de l’élément en
cours.
Fonction cree_liste2() :pointeur sur element
Var
pTete, pEncours, pPrec :pointeurs sur element
v :Entier
Début
// 1er élément
pTete←nouveau element
Afficher "Valeur du premier élément ?"
Saisir pTete→valeur
// Le premier élément est le précédent de l’élément suivant
pPrec←pTete
Répéter
Afficher "Valeur suivante (0=sortie) ?"
Saisir v
Si v<>0 Alors
// Allocation du nouvel élément
pEncours←nouveau element
pEncours→valeur ← v
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
176
allouer dynamiquement une zone mémoire. Il prendra la valeur que vous voulez, et son pointeur d’enregistrement
suivant recevra NIL. La fonction retourne un pointeur vers le premier élément de la nouvelle liste.
Fonction cree_liste():pointeur sur element
Var
pTete:pointeur sur element
Début
pTete←nouveau element
pTete→pSuiv ← NIL // (*pTete).pSuiv←NIL
Retoune pTete
FinFonc
Rappel : pTete→pSuiv ← NIL se lit ainsi : (*pTete).pSuiv←NIL, c’estàdire que le champ pSuiv de
l’enregistrement pointé par pTete reçoit la valeur NIL.
Cette fonction amène un premier commentaire. Dans le chapitre Les sousprogrammes vous avez appris la différence
entre les variables locales et globales. Ici pTete est une variable locale, elle sera détruite à la fin de la fonction.
Pourtant l’adresse qu’elle contient est retournée. C’est que le pointeur n’étant pas libéré, la zone mémoire allouée
dynamiquement l’est pour toute la durée du programme. À la sortie de la fonction, la zone mémoire existe encore et
donc son adresse est encore valide.
Remarquez que l’affectation de la valeur NIL à pSuiv n’est pas nécessaire car c’est sa valeur par défaut lors de la
déclaration de l’enregistrement structuré.
Pour exploiter cette fonction, il suffit de déclarer un pointeur, et lui affecter le résultat de celleci :
Programme liste1
Var
pTete:pointeur sur element
Début
pTete←cree_liste();
Fin
La fonction cree_liste est très simple. Peutêtre pourriezvous en profiter pour voir le mécanisme simple permettant
de rajouter des éléments les uns à la suite des autres. La fonction cree_liste2() modifiée va vous demander de saisir
en boucle des valeurs qui seront ajoutées les unes après les autres en fin de liste. Pour ceci vous aurez besoin de
conserver à chaque fois trois informations :
q Le pointeur pTete de la tête de la liste, qui devra être retourné par la fonction.
q Le pointeur pEncours de l’élément actuel de la liste, de l’élément rajouté en fait.
q Le pointeur pPrec de l’élément précédent, dont le pointeur pSuiv devra recevoir l’adresse de l’élément en
cours.
Fonction cree_liste2() :pointeur sur element
Var
pTete, pEncours, pPrec :pointeurs sur element
v :Entier
Début
// 1er élément
pTete←nouveau element
Afficher "Valeur du premier élément ?"
Saisir pTete→valeur
// Le premier élément est le précédent de l’élément suivant
pPrec←pTete
Répéter
Afficher "Valeur suivante (0=sortie) ?"
Saisir v
Si v<>0 Alors
// Allocation du nouvel élément
pEncours←nouveau element
pEncours→valeur ← v
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
176
