Corrigé 30. Enoncé
1. Epuration des listes bilatérales (version itérative)
Module Sous-liste (L, Tete, queue)
Tete := NIL
Queue := L
{ cette dernière initialisation ne sert que pour rendre le test
Suivant(Queue) valide dans la deuxième boucle dans
le cas particulier oł la liste contient
un seul élément ou pas de doubles du tout }
{ Trouver les deux premiers éléments identiques }
L := L ; Trouv := FAUX
TANTQUE Suivant(L) <> NIL ET NON Trouv :
SI Valeur(L) = Valeur (Suivant(L) )
Trouv := VRAI;
Tete := L
Queue := Suivant(L)
FSI
L := Suivant(L)
FINTANTQUE
{ Déterminer les autres éléments identiques }
TANTQUE Suivant(Queue) <> NIL ET Trouv :
SI Valeur(Queue) = Valeur(Suivant(Queue))
Queue := Suivant(Queue)
SINON
Trouv := FAUX
FSI
FINTANTQUE
Si la sous-liste n'est pas trouvée, Tete est à NIL.
Module Supprimer(L, Tete, Queue)
SI Précédent(Tete) # NIL :
Aff_Adrd(Précédent(Tete), Suivant(Queue))
SINON
L := Suivant (Queue)
FSI
SI Suivant(Queue) # NIL :
Aff_Adrg( Suivant(Queue), Précédent(Tete) )
FSI
{ Libération des éléments de la sous liste }
TANTQUE Tete <> Queue
L := Tete
Libérer(L)
Tete := Suivant(Tete)
FINTANTQUE
Liberer(Queue)
Suppression des éléments identiques dans une liste bilatérale
Continue := VRAI
TANTQUE Continue
Sous-Liste(L, Tete, Queue)
SI Tete = NIL
Continue := FAUX
SINON
{ On garde un seul
élément parmi les doubles }
Supprimer(L,
Suivant(Tete), Queue)
FSI
FINTANTQUE
2. Epuration des listes bilatérales ( version récursive)
Module SUPPR ( L )
Dans cet algorithme, l'élément supprimé n'est pas le premier élément de la liste.
SI Précédent(L) # NIL :
Aff_Adrd( Précédent(L), Suivant(L) )
FSI
SI Suivant(L) # NIL :
Aff_Adrg( Suivant(L), Précédent(L) )
FSI
Libérer(L)
Module récursif SUP (L)
SI Suivant(L) = NIL
Sup := L
SINON
SI Valeur(L) = Valeur(Suivant(L))
Sup :=
Sup(Suppr(Suivant(L)))
SINON
Sup := Sup(Suivant(L))
FSI
FSI
3. Implémentation d'une liste de piles de files d'attente
{Liste de piles}
Typeliste = STRUCTURE
Vl : Typepile
Adrl : POINTEUR(Typeliste)
FIN.
TYPE Typepile = POINTEUR(Type_elementpile)
{Pile de files d'attente}
TYPE Type_elementpile = STRUCTURE
Vp : Typefile
Adrp : POINTEUR(Type_elementpile)
FIN
{File}
TYPE Typefile = STRUCTURE
Tete, Queue : POINTEUR(Type_elementfile)
FIN
TYPE Type_elementfile = STRUCTURE
Vf : Typeqq
Adrf : POINTEUR(Type_elementfile)
FIN