Vous êtes sur la page 1sur 2

Soit L une liste bidirectionnelle.

A. Parcourir la liste pour déterminer le nombre d'éléments N et l'adresse L2 du


dernier élément
B. Rechercher simultanément dans les deux sens une donnée D
C. Supprimer le maillon d'adresse P donné

Corrigé:

A. Parcours pour compter le nombre d'element N et trouver la queue L2:

N = 0
p = L
L2 = nil
TQ ( p <> nil )
N++;
L2 = p
p = suivant(p)
FTQ

B.
rechercher dans les 2 sens d'une liste bidirectionnelle, veut dire rechercher à
partir de la tête (L) et à partir de la queue (L2):
On arrête le parcours dès qu'on trouve la valeur cherchée ou alors lorsqu'on arrive
au milieu de la liste:
Rechercher( entrees: D:typeqlq, L:ptr, L2:ptr,
sorties: trouv:booleen, r:ptr )
p = L;
q = L2;
trouv = faux;
stop = faux;
TQ ( non trouv ET p <> nil ET q <> nil ET non stop )
SI ( valeur(p) == D ) r = p; trouv = vrai
SINON
SI ( valeur(q) == D ) r = q; trouv = vrai
SINON
SI ( p == q OU suivant(p) == q ) stop = vrai
SINON
p = suivant(p);
q = precedent(q)
FSI
FSI
FSI
FTQ

C. Suppression de P

// MAJ du précédent de P (ou L)


SI ( precedent(P) <> nil )
Aff_adrd( precedent(P) , Suivant(P) )
SINON
L = Suivant(P)
FSI
// MAJ du suivant de P (ou L2)
SI ( Suivant(P) <> nil )
Aff_adrg( Suivant(P) , Precedent(P) )
SINON
L2 = Precedent(P)
FSI
// Suppresion du maillon
Libere(P)

Vous aimerez peut-être aussi