Professional Documents
Culture Documents
ORSAY
Algorithmique : Volume 4
Listes chanes Piles et files
lien
donne
Algorithmique 4 : Listes chanes
donne
nouvelle donne
Cellule insrer en fin de chane
donne
Algorithmique 4 : Listes chanes
donne
5
Courante
tte curseur
cellule
Algorithmique 4 : Listes chanes 10
listeA
tte curseur
val4
Algorithmique 4 : Listes chanes 11
aprs L1.suivant()
12
Mthodes (suite)
MProcdure premier() {place le curseur sur la premire cellule de la liste. Si la liste est vide, le curseur reste hors liste.} paramtre (D/R) cible : Liste
MProcdure dernier() {place le curseur sur la dernire cellule de la liste. Si la liste est vide, le curseur reste hors liste.} paramtre (D/R) cible : Liste
MFonction vide() retourne boolen {retourne vrai si la liste est vide, faux sinon} paramtre (D) cible : Liste
Algorithmique 4 : Listes chanes 13
Mthodes (suite)
MFonction horsListe() retourne boolen {retourne vrai si le curseur est plac hors liste ou si la liste est vide, faux sinon.} paramtre (D) cible : Liste MFonction info() retourne Info {retourne la valeur enregistre dans la cellule courante. Erreur si la liste est vide ou si le curseur est hors liste.} paramtre (D) cible : Liste MProcdure affecter(val) {affecte la valeur val la cellule courante. Erreur si la liste est vide ou si le curseur est hors liste.} paramtres (D/R) cible : Liste (D) val : Info
Algorithmique 4 : Listes chanes 14
Mthodes (suite)
MProcdure insrerAvant(val) {cre une nouvelle cellule, y affecte la valeur val, et l'insre avant la cellule courante. Le curseur est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si le curseur tait plac sur la tte, la nouvelle cellule devient la nouvelle tte. Si la liste tait vide, elle contient maintenant l'unique cellule qui vient d'tre cre. Erreur si la liste tait non vide et le curseur hors liste.} paramtres (D/R) cible : Liste (D) val : Info Remarque : premier() suivi de insrerAvant(val) ajouter en tte
Algorithmique 4 : Listes chanes 15
1e donne
3e donne
4e donne
16
Mthodes (suite)
MProcdure insrerAprs(val) {cre une nouvelle cellule, y affecte la valeur val, et l'insre aprs la cellule courante. Le curseur est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si liste tait vide, elle contient maintenant l'unique cellule qui vient d'tre cre. Erreur si la liste tait non vide et le curseur hors liste.} paramtres (D/R) cible : Liste (D) val : Info Remarque : dernier() suivi de insrerAprs(val) ajouter en queue
17
cellule courante
nouvelle cellule
nouvelle donne 4e donne
donne
3e
donne
cellule courante
Algorithmique 4 : Listes chanes
nouvelle cellule
18
Mthodes (suite)
MProcdure supprimer() {supprime la cellule courante. Le curseur est alors plac sur la cellule suivante qui devient ainsi la nouvelle cellule courante. Si la cellule supprimer est la dernire cellule, le curseur devient hors liste. Si la cellule supprimer est la tte, la cellule suivante devient alors la nouvelle tte. Si la liste ne contenait qu'une seule cellule, la liste devient vide. Erreur si la liste est vide ou si le curseur est hors liste.} paramtre (D/R) cible : Liste Remarque premier() suivi de supprimer() supprimer en tte dernier() suivi de supprimer() supprimer en queue
Algorithmique 4 : Listes chanes 19
4e donne
5e donne
3e donne
paramtre
MProcdure afficherListe()
{Affiche toutes les valeurs contenues dans la liste cible.}
paramtre
MProcdure supprimerTout()
{supprime toutes les cellules de la liste (qui peut tre vide); la liste devient vide et le curseur devient hors liste.}
paramtre
Remarques importantes
Mthodes de deux types :
- mthodes de base: leur dfinition ncessite de modifier les attributs privs de la classe (sera fait en C++). - saisirListe(), afficherListe(), supprimerTout() : mthodes rajoutes la classe pour rendre son utilisation plus commode; leur dfinition peut se faire laide des mthodes de base.
24
copieCible.premier() {place le curseur en tte} tant que non copieCible.horsListe() faire {arrt quand curseur hors liste} afficher(copieCible.info()) {rcupre la valeur de la cellule courante et l'affiche} copieCible.suivant() {place le curseur sur la cellule suivante} ftq fin
Algorithmique 4 : Listes chanes 25
26
27
28
paramtre
29
30
Files et Piles
Retour sur la motivation: pourquoi des listes chanes?
Possibilit de crotre ou de diminuer selon les besoins Facilit de rordonnancement des lments
Exemples : - placer le dernier lment en tte : changer trois rfrences (tableau : tout dcaler) - insertion d'un nouvel lment : changer deux rfrences, indpendamment de la longueur de la liste - effacement d'un lment
Mais : mal adaptes d'autres oprations - trouver le k-ime lment : parcours squentiel de k rfrences
(tableau : accs direct lindice k) - trouver l'lment qui prcde un lment donn
Algorithmique 4 : Files et Piles 31
Files et Piles
Dans beaucoup d'applications, on peut se contenter de modes d'accs trs restreints la structure de donnes
Avantages :
le programme n'a pas se proccuper de dtails de gestion (des rfrences, par exemple) traitements plus simples et moins rigides (moins d'oprations)
32
tte
queue
- les ajouts se font en fin de file, les suppressions en tte de file - seule linformation de la tte est accessible et traitable file dattente un guichet "premier rentr, premier sorti" (FIFO : first in first out, queue)
Algorithmique 4 : Files et Piles 33
tte
cible.dpiler( ) cible.empiler("Alice")
- les ajouts comme les suppressions se font en tte de pile - seule linformation de la tte est accessible et traitable pile dassiettes "dernier rentr, premier sorti" (LIFO : last in first out, stack)
Algorithmique 4 : Files et Piles 34
la classe File :
les besoins
Attributs :
- la tte et la queue, mais pas de curseur
Mthodes :
- infoTte() : retourne la valeur de linformation en tte de file - vide() : indique si la file est vide - ajouterEnFin(val) : ajoute une information en fin de file - supprimerEnTte() : supprime (et retourne) linformation en tte de file - saisirFile() - afficherFile()
Algorithmique 4 : Files et Piles 35
Mthodes
MFonction infoTte() retourne Info
{retourne la valeur enregistre dans la cellule de tte. Erreur si la file est vide}
paramtre (D/R) cible : File ; (D) val : Info Mfonction supprimerEnTte() retourne Info
{Supprime la premire cellule de la file et retourne la valeur quelle contient. Si la file ne contenant qu'une seule cellule, la file devient vide. Erreur si la file est vide.}
36
Mthodes (suite)
MProcdure saisirFile ()
{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs saisies.}
paramtre (R) cible : File variables uneVal : Info, cpt : entier dbut saisir(uneVal) ; cpt 0 tant que uneVal VALSTOP faire cpt cpt + 1 cible.ajouterEnFin(uneVal) saisir(uneVal) ftq afficher(La nouvelle file contient , cpt, cellules.) fin
Algorithmique 4 : Files et Piles 37
Mthodes (suite)
MProcdure afficherFile() {Affiche toutes les valeurs contenues dans la file cible.} paramtre (D) cible : File variables uneVal : Info copieCible : File dbut copieCible cible tant que non copieCible.vide() faire uneVal copieCible.supprimerEnTte() afficher(uneVal) ftq fin
38
la classe Pile :
les besoins
Attributs :
- la tte mais pas de curseur
Mthodes :
- infoTte() : retourne la valeur de linformation en tte de pile - vide() : indique si la pile est vide - empiler(val) : ajoute une information en tte de pile - dpiler() : supprime (et retourne) linformation en tte de pile - saisirPile() - afficherPile()
Algorithmique 4 : Files et Piles 39
Mthodes
MFonction infoTte() retourne Info
{retourne la valeur enregistre dans la cellule de tte. Erreur si la pile est vide}
paramtre
paramtre
40
Mthodes (suite)
MProcdure saisirPile()
{Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs saisies}
saisir(uneVal) ; cpt 0 tant que uneVal VALSTOP faire cpt cpt + 1 cible.empiler(uneVal) saisir(uneVal) ftq afficher("La nouvelle pile contient", cpt, "cellules.")
Algorithmique 4 : Files et Piles 41
fin
Mthodes (suite)
MProcdure afficherPile() {Affiche toutes les valeurs contenues dans la pile cible.} paramtre (D) cible : Pile variables uneVal : Info copieCible : Pile dbut copieCible cible tant que non copieCible.vide() faire uneVal copieCible.dpiler() afficher(uneVal) ftq fin
42
Exemple 1 : Parenthsage
Fonction bienForm(tab, nbr) retourne boolen
{tab est un tableau de nbr parenthses. Retourne vrai si le parenthsage est cohrent}
paramtres variables
(D) tab: tableau[1, MAX] de caractres; nbr : entier cpt, marque, val : entier; bienform : boolen unePile : Pile {unePile est vide au dpart}
dbut cpt 1; marque 0 {jeton} ; bienform vrai tant que bienform et cpt nbr faire si tab[cpt] = '(' alors unePile.empiler(marque) sinon si unePile.vide() alors bienform faux sinon val unePile.dpiler() {on a alors ') }
fsi
Parenthsage : simulation
44
valuation : simulation
46
postfix
Procdure infixVersPostfix(tab, nbr, tab_res, nbr_res) paramtres (D) tab : tableau[1, MAX] de caractres (D) nbr : entier (R) tabRes: tableau[1, MAX] de caractres (R) nbrRes : entier variables i, j : entier ; unePile : Pile dbut i0; j0 tant que ( i < nbr) i i+1 si oprateur(tab[i]) alors unePile.empiler (tab[i]) sinon si tab[i] = ') alors j j + 1; tabRes[j] unePile .dpiler() ; sinon si nombre(tab[i]) alors j j+1 ; tabRes[j] tab[i] fsi fsi ftq nbrRes j fin Algorithmique 4 : Files et Piles
47
Conversion : simulation
48
50
51
Fin Volume 4
52