Vous êtes sur la page 1sur 8

Jean-François Remm, Jean-François Berdjugin, Jean-François

Correction TD Algorithmique
5.3 Pile - 5.4 Liste
5.3 Pile
Classe Pile<E>
var sommet : entier
var vals : Tableau<E>
Methode Pile()
vals ← nouveau Tableau <E> ( ?)
sommet ← -1
Fin Methode

Methode estVide() :booléen


Renvoie (sommet=-1)
Fin Methode

Methode sommet() :E
Si non estVide() Alors
Renvoie (vals[sommet])
Fin Si
Fin Methode

Methode empiler(val : E) :vide


sommet ← sommet + 1
vals[sommet] ← val
Fin Methode

Methode depiler() :E
var res : E
Si non estVide() Alors
res ← vals[sommet]
sommet ← sommet – 1
renvoie (res)
Fin Si
Fin Methode
Fin Classe

1/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

5.4 Liste
5.4.1 Implantation Cellule
Classe Cellule<E>
var val : E
var suiv : Cellule
Methode Cellule(valeur : E, suivant : Cellule)
val ← valeur
suiv ← suivant
Fin Methode
Fin Classe

5.4.2 Implantation Liste


Utilisation d’une cellule vide pour matérialiser la tête.

Classe Liste<E>
var debut : Cellule
Methode Liste()
debut ← nouvelle Cellule(X, null)
Fin Methode

Methode estVide() :booleen


Renvoie (debut.suiv=null)
Fin Methode

Methode premier() :E
Si (non estVide()) Alors
Renvoie (debut.suiv.val)
Fin Si
Fin Methode

Methode dernier() :E
var cour : Cellule
Si (non estVide()) Alors
cour ← debut.suiv
Tant que (cour.suiv ≠ null) Faire
cour ← cour.suiv
Fin Tant que
Renvoie (cour.val)
Fin Si
Fin Methode

Methode element(i : entier) :E


var cour : Cellule
var pos : entier
Si (i>0) et (i≤nbElement()) Alors
cour ← debut.suiv
pos ← 1

2/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

Tant que (pos ≠ i) Faire


cour ← cour.suiv
pos ← pos + 1
Fin Tant que
Renvoie (cour.val)
Fin Si
Fin Methode

Methode insererTete(val : E) :vide


debut.suiv ← nouvelle Cellule(val, debut.suiv)
Fin Methode

Methode insererQueue(val : E) :vide


var cour : Cellule
cour ← debut
Tant que (cour.suiv ≠ null) Faire
cour ← cour.suiv
Fin Tant que
cour.suiv ← nouvelle Cellule(val, null)

Fin Methode

Methode inserer(val :E, pos :entier) :vide


var i : entier
var cour : Cellule
Si ((pos > 0) et (pos ≤nbElement()+1) Alors
cour ← debut
i←1
Tant que (pos -1 ≠ i) Faire
cour ← cour.suiv
i←i+1
Fin Tant que
cour.suiv ← nouvelle Cellule(val, cour.suiv)

Fin Methode

Methode supprimerTete() :vide


Si (non estVide()) Alors
debut.suiv ← debut.suiv.suiv
Fin Si
Fin Methode

Methode supprimerQueue() :vide


Si (non estVide()) Alors
cour ← debut
Tant que (cour.suiv.suiv ≠ null) Faire
cour ← cour.suiv
Fin Tant que
cour.suiv ← null

3/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

Fin Si
Fin Methode

Methode nbElement() :entier


var res : entier
var temp : Cellule
res ← 0
temp ← debut.suiv
Tant que (temp ≠ null) faire
res ← res + 1
temp ← temp.suiv
Fin Tant que
Renvoie (res)
Fin Methode
Fin Classe

4/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

5.4.3 Implantation Modifiée pour itérer

Classe Liste<E>
var debut : Cellule
var curseur : Cellule

Methode Liste()
debut ← nouvelle Cellule(X, null)
curseur ← debut
Fin Methode

Methode demarrer() :vide


curseur ← debut
Fin Methode

Methode aElement() :booleen


Renvoie (curseur.suiv≠null)
Fin Methode

Methode element() :E
Si (aElement()) Alors
Renvoie (curseur.suiv.val)
Fin Si
Fin Methode

Methode addElement(val : E) :vide


curseur.suiv ← nouvelle Cellule(val, curseur.suiv)
Fin Methode

Methode delElement() :vide


curseur.suiv ← curseur.suiv.suiv
Fin Methode

Methode avancer() :vide


Si (aElement()) Alors
curseur ← curseur.suiv
Fin Si
Fin Methode

Methode reculer() :vide


var cour : Cellule
Si (curseur≠debut) Alors
cour ← debut
tant que (cour.suiv ≠ curseur) faire
curseur ← curseur.suiv
fin tant que
curseur ← cour

5/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

Fin Si
Fin Methode

6/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

5.4.4 Utilisation
Exercice 75 (Exécution d'un algorithme)
Exécuter l'algorithme suivant :
Algo TestListe
var l : Liste <entier>
Début
l ← nouvelle Liste()
l.insererQueue(1)
l.insererTete(2)
l.insererTete(3)
l.demarrer()
l.inserer(4)
l.inserer(5)
l.avancer()
l.inserer(6)
l.demarrer()
Tant que (l.aElement()) Faire
Ecrire (l.element())
l.avancer()
Fin Tant que
Fin

Exercice 76 (Suppression)
Écrire une fonction prenant en paramètre une liste d'entier et qui supprime les éléments
négatifs.
Fonction supprNeg(l : Liste<entier>) :vide
l.demarrer()
Tant que (l.aElement()) faire
Si (l.element() < 0) alors
l.delElement()
sinon
l.avancer()
fin si
fin tant que
fin fonction

7/8
Jean-François Remm, Jean-François Berdjugin, Jean-François

Fin Fonction

Exercice 77 (Lecture interactive)


On lit interactivement des entiers au clavier jusqu'à lire -1. Écrire un algorithme qui rempli
une liste avec les valeurs saisies. Avantage : on ne connaît pas d'avance la taille de la liste.
Algo SaisieListe
var l : Liste<entier>
var i : entier
Debut
l ← nouvelle Liste<entier>()
Lire(i)
Tant que (i≠-1) faire
l.insererQueue(i)
Lire(i)
Fin tant que
l.demarrer()
Tant que (l.aElement()) faire
Ecrire(l.element())
l.avancer()
Fin tant que
fin

8/8

Vous aimerez peut-être aussi