Les traitements sont ici très détaillés. Cependant, analysez les procédures ajout_premier() et ajout_début(). Que
remarquezvous ? Elles se ressemblent, d’autant plus que dans ajout_début(), pTete contient déjà NIL s’il n’y pas
d’enregistrements. Donc les deux procédures sont identiques : ajout_debut() remplace ajout_premier().
Regardez maintenant ajout_fin() et ajout_milieu() : dans ajout_milieu, pEncours>pSuiv reçoit quoi si vous êtes en fin
de liste ? La valeur NIL ! Donc les deux sont identiques, et ajout_mlilieu() peut remplacer ajout_fin(). La procédure
ajout_element se trouve simplifiée ainsi.
Les deux autres procédures ne servent plus à rien.
Procédure ajout_element(vrech,vnouveau :entiers, pTete
:pointeur sur element)
...
Si pPrec=NIL Alors
ajout_début(pNouveau, pTete)
Sinon
ajout_milieu(pNouveau, pPrec, pEncours)
FinSi
FinProc
f. Suppression d’un élément
L’ajout d’éléments est un grand pas en avant car vous connaissez et comprenez intégralement le principe inhérent
aux listes chaînées. Pour supprimer un élément de cette liste, c’est quasiment la même chose, il faut juste recoller les
morceaux et libérer la mémoire allouée à l’élément supprimé. Il y a quatre possibilités :
q Supprimer le seul élément de la liste ;
q Supprimer le premier élément de la liste ;
q Supprimer le dernier élément de la liste ;
q Supprimer un élément au milieu de la liste.
Le tout à supposer que l’élément à supprimer existe, donc qu’il faut tout d’abord le rechercher et connaître son
adresse, et celle de l’élément précédent. L’élément précedent verra son pointeur pSuiv prendre comme valeur le
pointeur pSuiv de l’élément trouvé.
Les fonctions suivantes restructurent la liste pour lui redonner le bon chaînage. La libération de la mémoire occupée
par l’élément à effacer sera effectuée selon le même modèle que la fonction fédératrice d’ajout dans une grande
fonction de suppression.
C’est facile, si l’élément est le seul, donc la tête de la liste, il suffit de placer son pointeur à NIL. Pas de précédent,
pas de suivant, c’est terminé.
Procédure suppr_unique(ES :pTete :pointeur sur element)
Début
pTete←NIL
FinProc
C’est aussi simple : c’est l’élément suivant qui devient la tête de la liste.
Procédure suppr_premier(ES :pTete :pointeur sur element)
Début
pTete ← pTete→pSuiv
FinProc
Toujours aussi simple : l’élément précédent reçoit NIL comme valeur de pointeur suivant.
Simplification
Supprimer le seul élément
Supprimer le premier élément
Supprimer le dernier élément
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
180
remarquezvous ? Elles se ressemblent, d’autant plus que dans ajout_début(), pTete contient déjà NIL s’il n’y pas
d’enregistrements. Donc les deux procédures sont identiques : ajout_debut() remplace ajout_premier().
Regardez maintenant ajout_fin() et ajout_milieu() : dans ajout_milieu, pEncours>pSuiv reçoit quoi si vous êtes en fin
de liste ? La valeur NIL ! Donc les deux sont identiques, et ajout_mlilieu() peut remplacer ajout_fin(). La procédure
ajout_element se trouve simplifiée ainsi.
Les deux autres procédures ne servent plus à rien.
Procédure ajout_element(vrech,vnouveau :entiers, pTete
:pointeur sur element)
...
Si pPrec=NIL Alors
ajout_début(pNouveau, pTete)
Sinon
ajout_milieu(pNouveau, pPrec, pEncours)
FinSi
FinProc
f. Suppression d’un élément
L’ajout d’éléments est un grand pas en avant car vous connaissez et comprenez intégralement le principe inhérent
aux listes chaînées. Pour supprimer un élément de cette liste, c’est quasiment la même chose, il faut juste recoller les
morceaux et libérer la mémoire allouée à l’élément supprimé. Il y a quatre possibilités :
q Supprimer le seul élément de la liste ;
q Supprimer le premier élément de la liste ;
q Supprimer le dernier élément de la liste ;
q Supprimer un élément au milieu de la liste.
Le tout à supposer que l’élément à supprimer existe, donc qu’il faut tout d’abord le rechercher et connaître son
adresse, et celle de l’élément précédent. L’élément précedent verra son pointeur pSuiv prendre comme valeur le
pointeur pSuiv de l’élément trouvé.
Les fonctions suivantes restructurent la liste pour lui redonner le bon chaînage. La libération de la mémoire occupée
par l’élément à effacer sera effectuée selon le même modèle que la fonction fédératrice d’ajout dans une grande
fonction de suppression.
C’est facile, si l’élément est le seul, donc la tête de la liste, il suffit de placer son pointeur à NIL. Pas de précédent,
pas de suivant, c’est terminé.
Procédure suppr_unique(ES :pTete :pointeur sur element)
Début
pTete←NIL
FinProc
C’est aussi simple : c’est l’élément suivant qui devient la tête de la liste.
Procédure suppr_premier(ES :pTete :pointeur sur element)
Début
pTete ← pTete→pSuiv
FinProc
Toujours aussi simple : l’élément précédent reçoit NIL comme valeur de pointeur suivant.
Simplification
Supprimer le seul élément
Supprimer le premier élément
Supprimer le dernier élément
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
180
