Procédure suppr_dernier(E :pPrec :pointeur sur element)
Début
pPrec→pSuiv ← NIL
FinProc
Il faut raccorder l’élément précédent avec l’élément suivant.
Procédure suppr_milieu(E :pPrec,pEncours : pointeurs sur element)
Début
pPrec→pSuiv ← pEncours→pSuiv
FinFonc
Contrairement à l’ajout, vous pouvez tout de suite voir s’il est possible de simplifier avant d’aller plus loin, selon le
même principe. Ainsi dans la fonction suppr_premier() pTete recevra NIL si l’élément supprimé est le seul car pTete>pSuiv vaut NIL.
Idem pour suppr_milieu() et suppr_dernier(). Dans suppr_milieu, pEncours>pSuiv vaut NIL si l’élément est le dernier.
Les fonctions suppr_unique() et suppr_dernier() sont donc inutiles, sauf pour l’exemple !
Tout d’abord vous devez trouver l’élément à supprimer. S’il n’y est pas, il n’y a rien à supprimer. Donc si pEncours,
contenant l’élément trouvé, vaut NIL, il n’y a rien à faire. Ensuite, il y a deux cas de figure :
q pPrec vaut NIL : l’élément à supprimer est le premier (ou le seul).
q pPrec est différent de NIL, l’élément à supprimer est au milieu ou en fin de liste.
Ensuite, après avoir appelé la fonction adéquate, vous n’avez plus qu’à libérer la mémoire allouée pour l’élément, et
passer son pointeur à NIL.
La procédure suppr_element ne prend que deux arguments : la valeur de l’élément à supprimer, et la tête de la liste.
Procédure suppr_element(E:vrech:entier,ES:pTete:pointeur sur element)
Var
pPrec, pEncours :pointeurs sur element
Début
recherche_liste(vrech,pTete,pPrec,pEncours:pointeurs sur elements)
Si pEncours=NIL Alors
Afficher "Element absent"
Sinon
Si pPrec=NIL Alors
suppr_premier(pTete)
Sinon
suppr_milieu(pPrec,pEncours)
FinSi
Libérer pEncours
pEncours←NIL
FinProc
g. Supprimer toute la liste
Pour supprimer tous les éléments de la liste, il suffit de supprimer tous les éléments jusqu’au dernier. Mais attention !
Ne supprimez pas un élément sans avoir auparavant conservé l’adresse de l’élément suivant ! Si vous ne l’avez pas
fait, non seulement les éléments suivants sont perdus, mais la mémoire des éléments suivants ne pourra plus être
libérée !
La fonction suppr_liste ne prend qu’un seul argument : la tête de la liste.
Fonction suppr_liste(pTete :pointeur sur element)
Var
Supprimer un élément au milieu
Simplification
Généralisation
- 8 -
© ENI Editions - All rigths reserved - Jonifar lina
181
Début
pPrec→pSuiv ← NIL
FinProc
Il faut raccorder l’élément précédent avec l’élément suivant.
Procédure suppr_milieu(E :pPrec,pEncours : pointeurs sur element)
Début
pPrec→pSuiv ← pEncours→pSuiv
FinFonc
Contrairement à l’ajout, vous pouvez tout de suite voir s’il est possible de simplifier avant d’aller plus loin, selon le
même principe. Ainsi dans la fonction suppr_premier() pTete recevra NIL si l’élément supprimé est le seul car pTete>pSuiv vaut NIL.
Idem pour suppr_milieu() et suppr_dernier(). Dans suppr_milieu, pEncours>pSuiv vaut NIL si l’élément est le dernier.
Les fonctions suppr_unique() et suppr_dernier() sont donc inutiles, sauf pour l’exemple !
Tout d’abord vous devez trouver l’élément à supprimer. S’il n’y est pas, il n’y a rien à supprimer. Donc si pEncours,
contenant l’élément trouvé, vaut NIL, il n’y a rien à faire. Ensuite, il y a deux cas de figure :
q pPrec vaut NIL : l’élément à supprimer est le premier (ou le seul).
q pPrec est différent de NIL, l’élément à supprimer est au milieu ou en fin de liste.
Ensuite, après avoir appelé la fonction adéquate, vous n’avez plus qu’à libérer la mémoire allouée pour l’élément, et
passer son pointeur à NIL.
La procédure suppr_element ne prend que deux arguments : la valeur de l’élément à supprimer, et la tête de la liste.
Procédure suppr_element(E:vrech:entier,ES:pTete:pointeur sur element)
Var
pPrec, pEncours :pointeurs sur element
Début
recherche_liste(vrech,pTete,pPrec,pEncours:pointeurs sur elements)
Si pEncours=NIL Alors
Afficher "Element absent"
Sinon
Si pPrec=NIL Alors
suppr_premier(pTete)
Sinon
suppr_milieu(pPrec,pEncours)
FinSi
Libérer pEncours
pEncours←NIL
FinProc
g. Supprimer toute la liste
Pour supprimer tous les éléments de la liste, il suffit de supprimer tous les éléments jusqu’au dernier. Mais attention !
Ne supprimez pas un élément sans avoir auparavant conservé l’adresse de l’élément suivant ! Si vous ne l’avez pas
fait, non seulement les éléments suivants sont perdus, mais la mémoire des éléments suivants ne pourra plus être
libérée !
La fonction suppr_liste ne prend qu’un seul argument : la tête de la liste.
Fonction suppr_liste(pTete :pointeur sur element)
Var
Supprimer un élément au milieu
Simplification
Généralisation
- 8 -
© ENI Editions - All rigths reserved - Jonifar lina
181
