Académique Documents
Professionnel Documents
Culture Documents
ORSAY
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
Algorithmique : Volume 4
Listes chanes
Piles et files
donne
donne
donne
lien
donne
Algorithmique 4 : Listes chanes
donne
nouvelle
donne
Cellule insrer
en fin de chane
donne
donne
donne
nouvelle
donne
nouvelle
donne
cellule retirer
Cellule insrer
en dbut de chane
donne
Algorithmique 4 : Listes chanes
donne
5
Courante
donne
donne
donne
Dernire
("queue")
donne
Suivante
donne
Algorithmique 4 : Listes chanes
cellule
tte
curseur
cellule
Algorithmique 4 : Listes chanes
10
listeA
tte
val1
val2
val3
val4
curseur
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
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
insrerAvant :
en milieu de liste
1e donne
nouvelle cellule
2e donne
nouvelle
donne
3e donne
4e donne
insrerAvant :
en dbut de liste
nouvelle cellule
nouvelle
donne
cellule courante
1e donne
2e 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
donne
cellule courante
2e
donne
3e
nouvelle
donne
donne
insrerAprs :
en fin de liste
1e donne
nouvelle cellule
4e donne
2e donne
3e donne
cellule courante
Algorithmique 4 : Listes chanes
nouvelle
donne
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
supprimer :
en milieu de liste
1e donne
2e donne
supprimer :
en fin de liste
1e donne
3e donne
4e donne
5e donne
2e donne
3e donne
4e donne
cellule courante,
supprimer
Algorithmique 4 : Listes chanes
20
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
21
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.
22
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
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
Julie
Anna
Pierre
Daniel
cible. supprimerEnTte()
queue
cible.ajouterEnFin ("Daniel")
33
tte
Julie
Anna
Pierre
Daniel
cible.dpiler( )
cible.empiler("Alice")
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}
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}
paramtre
variables
dbut
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.")
fin
Algorithmique 4 : Files et Piles
41
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
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
fsi
cpt cpt +1
ftq
retourne (bienform et unePile.vide() )
fin
Algorithmique 4 : Files et Piles
43
Parenthsage : simulation
44
45
valuation : simulation
46
47
Conversion : simulation
48
49
50
51
Fin Volume 4
52