Les  traitements  sont  ici  très  détaillés.  Cependant,  analysez  les  procédures  ajout_premier()  et  ajout_début().  Que 
remarquez­vous ? 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
Précédent

- 180/220

Suivant