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 Methode estvide() :booléen Renvoie (sommet=-1) Methode sommet() :E Si non estvide() Alors Renvoie (vals[sommet]) Methode empiler(val : E) :vide sommet sommet + 1 vals[sommet] val Methode depiler() :E var res : E Si non estvide() Alors res vals[sommet] sommet sommet 1 renvoie (res) Fin Classe 1/8
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 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) Methode estvide() :booleen Renvoie (debut.suiv=null) Methode premier() :E Si (non estvide()) Alors Renvoie (debut.suiv.val) Methode dernier() :E Si (non estvide()) Alors cour debut.suiv Tant que (cour.suiv null) Faire Renvoie (cour.val) Methode element(i : entier) :E var pos : entier Si (i>0) et (i nbelement()) Alors cour debut.suiv pos 1 2/8
Tant que (pos i) Faire pos pos + 1 Renvoie (cour.val) Methode inserertete(val : E) :vide debut.suiv nouvelle Cellule(val, debut.suiv) Methode insererqueue(val : E) :vide cour debut Tant que (cour.suiv null) Faire cour.suiv nouvelle Cellule(val, null) Methode inserer(val :E, pos :entier) :vide var i : entier Si ((pos > 0) et (pos nbelement()+1) Alors cour debut i 1 Tant que (pos -1 i) Faire i i + 1 cour.suiv nouvelle Cellule(val, cour.suiv) Methode supprimertete() :vide Si (non estvide()) Alors debut.suiv debut.suiv.suiv Methode supprimerqueue() :vide Si (non estvide()) Alors cour debut Tant que (cour.suiv.suiv null) Faire cour.suiv null 3/8
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 Renvoie (res) Fin Classe 4/8
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 Methode demarrer() :vide curseur debut Methode aelement() :booleen Renvoie (curseur.suiv null) Methode element() :E Si (aelement()) Alors Renvoie (curseur.suiv.val) Methode addelement(val : E) :vide curseur.suiv nouvelle Cellule(val, curseur.suiv) Methode delelement() :vide curseur.suiv curseur.suiv.suiv Methode avancer() :vide Si (aelement()) Alors curseur curseur.suiv Methode reculer() :vide Si (curseur debut) Alors cour debut tant que (cour.suiv curseur) faire curseur curseur.suiv fin tant que curseur cour 5/8
6/8
5.4.4 Utilisation Exercice 75 (Exécution d'un algorithme) Exécuter l'algorithme suivant : Algo TestListe Début Fin var l : Liste <entier> 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() 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 fin fonction l.demarrer() Tant que (l.aelement()) faire Si (l.element() < 0) alors sinon fin si fin tant que l.delelement() l.avancer() 7/8
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 Debut fin var l : Liste<entier> var i : entier 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 8/8