Cours Algorithmes4
Cours Algorithmes4
Cours Algorithmes4
.
.
.
base
..
.
.
.
.
base
c
b
a
(1)
empiler (val)
val
z
c
b
a
(2)
c
dpiler (val)
b
b
val
a
a
c
(1)
(3)
On peut dfinir dautres primitives qui facilitent
lutilisation dune pile, mais qui ne modifient pas la pile
elle-mme.
- Une fonction sommetpile qui dlivre la valeur de
llment de sommet de la pile.
c
sommetpile dlivre la valeur
b
c, sans modification de pile.
a
- Deux prdicats qui permettent de tester ventuellement
les sur- et sous-dpassements de la pile : pilevide et
pilepleine. Les dbordements sont dtermins en
comparant laccs courant au premier lment de la pile
et aux deux valeurs extrmes de cet accs qui
dterminent entirement la pile (base et valeur de laccs
pour la taille maximale).
Enfin, une primitive initpilevide permet dinitialiser une
pile.
Une pile est une liste chane, elle peut donc tre
reprsente de manire contigu (4.2.1.1.) ou chane
(4.2.1.2.).
4.2.1.1. Reprsentation contigu dune pile.
Soit une pile utilisant une reprsentation contigu : un
vecteur pile dont on donne priori la taille maximale
dimpile.
Algorithme : primitives empiler, dpiler.
Programme ch421_1.c = a et b
Algorithme : sommetpile, pilevide, pilepleine et
initpilevide.
Programme ch421_2.c : a, b, c et d.
4.2.1.2. Reprsentation chane dune pile.
Une pile peut tre reprsente par une liste linaire
chane telle que les insertions ou les suppressions sont
toujours effectues en tte de liste.
pile
anne 2008
54
<expref>::=
(<opbin><expref><expref>)|<opun><
<expref >|<variable>.
Exemples :
+ - A B C ((A - B) + C)
< A B C (( (A < B)) C)
A-+BC nest pas une expression prfixe.
a) dfinitions
- expression crite sous forme compltement parenthse
On peut dfinir lcriture compltement parenthse
par les quatre rgles suivantes :
1) Une variable est une expression compltement
parenthse.
2) si x et y sont des expressions compltement
parenthses, un oprateur binaire, alors (x y)
est une expression compltement parenthse.
3) si x est une expression compltement
parenthse, un oprateur unaire, alors (x) est
une expression compltement parenthse.
4) Il ny a pas dautres expressions compltement
parenthses que celles formes partir des rgles
prcdentes.
Nous poserons les hypothses suivantes :
Un oprateur binaire est un lment de lensemble
[+,-, *, /] pour les oprateurs arithmtiques, ou de
lensemble [<, , =, , >, , , v].pour les
oprateurs de relation et logiques.
Un oprateur unaire est soit ou pour les
oprateurs arithmtiques (ces symboles reprsentent
le + et le unaires), soit pour les oprateurs
logiques.
Une variable est une lettre majuscule.
On peut donner la grammaire BNF (Backus-Naur
Form) qui rsume les dfinitions :
<ecp>::=(<ecp><opbin><ecp>)|<opun><ecp>|<vari
able>
<opbin> ::= + | - | * | / | < | | = | | > | | | v
<opun> ::= | |
<variable> ::= A | B | C| Z
Exemples : expressions compltement parenthses.
((A + B) * C), (((A / B) = C) (E < F), (A).
Les expressions suivantes ne sont des expressions
complment parenthses : (A), ((A + B)), A B.
Ecp : ( (A < B) C)
Expref : < A B C
Expost : A B < C
- Expression crite sous forme infixe.
Les expressions crites sous forme compltement
parenthse sont simples lire, mais il est souvent
fastidieux dcrire toutes les parenthses. On peut
supprimer certaines parenthses si lon admet lordre de
priorit entre les oprateurs lors de lvaluation, sinon
linterprtation dune telle expression incompltement
parenthse serait ambigu.
Une expression reprsente ainsi est dite sous forme
infixe. Cest lcriture habituellement utilise dans les
langages de programmation.
Exemples :
Ecp : ((((A / B) * C) (C / (D * E))) (F - G))
Infixe : A/B*C C/ (D * E) (F G)
Les grammaires BNF qui dfinissent les expressions
infixes. Nous donnons la BNF tendue, o les symboles
en accolades peuvent tre omis ou bien rptes un
nombre quelconque de fois.
<expinf> ::= <expsimple> { <oprel><expsimple>}
<expsimple> ::= <terme> {<opadd><terme>}
<terme> ::= <facteur> {<opmult><facteur>}
<facteur>::=<variable>|-<facteur>|<facteur>|(<expinf>)
<oprel> ::= < | | = | | > |
<opadd> ::= + | - | v
<opmult> ::= * | / |
<variable> ::= A | B | | Z
anne 2008
55
tat initial
pile vide
20
empiler
valeur de A
4
20
empiler
valeur de B
80
valuer le *
O
valeur(a) est une fonction qui dlivre la valeur v
qui est associe la variable a,
AB*CD+/# AB*CD+/#
AB*CD+/#
AB*CD+/#
anne 2008
56
9
80
7
9
80
empiler
empiler
valeur de C valeur de D
16
80
valuer le +
5
valuer le /
expost[i] = #
parcours termin, le rsultat final est
la valeur au sommet de la pile. *
expost[i] #
>> expost[i] est une variable.
il faut empiler sa valeur.
i++ ; H
on dpile son oprande (ou ses 2 oprandes),
puis on empile le rsultat de lopration.
i++ ; H
Itration : tantque(expost[i] #)
Initialisation : i = 1 ; H //en C, indice du 1er lment
//dun vecteur est gal 0.
Algorithme : valuation dune expression postfixe.
Programme ch421_5.c
- Evaluation dune expression compltement
parenthse.
Nous donnons ici, un algorithme qui utilise un
parcours squentiel de gauche droite de
lexpression compltement parenthse et des
rductions successives des sous-expressions rencontres, mais les informations sauvegardes dans
la pile seront diffrentes.
Le principe est de sauvegarder dans la pile
dvaluation non des valeurs doprandes, mais des
sous-expressions compltes (oprandes et valeurs
doprandes) sans les dlimiteurs.
On supposera cette fois que la pile peut contenir,
par des codages appropris, soit des valeurs
numriques ou logiques, soit des oprateurs (caractres).
Une sous-expression tant dlimite par une
parenthse gauche et une parenthse droite, leur
rencontre dans le parcours squentiel de
lexpression va provoquer respectivement lemp-
*
2
*
2
3
*
2
+
3
*
2
1
+
3
*
2
4
*
2
anne 2008
57
EXPOST : A
EXCP : (A + B ) +
EXPOST :AB
EXCP : (A + B) +
EXPOST : ...AB+
EXCP : (A + B)
anne 2008
58
EXPOST : A
AB
AB*
(
/
+
/
+
(
/
+
EXPOST : AB*C
*
(
/
+
AB*C
AB*C
*
(
/
+
AB*CD
/
+
.
.
.
Argument 1
environnement
code de lopration
environnement prcdent
2
mult
3
mult
4
mult
5
mult
AB*CDE*
AB*CD*/+
...
5
mult
4
mult
5
mult
fact(4)
fact(3)
fact(4)
fact(5)
fact(5)=5*fact(4) fact(4)=4*fact(3)
1
2
mult
3
mult
4
mult
5
mult
fact(1)
fact(2)=2*fact(1)
fact(1)
2
3
mult
4
mult
5
mult
fact(2)
..
24
5
mult
fact(4)
120
valuation
valuation
de fact(1) de fact(2)
valuation
de fact(4)
anne 2008
fact(5)
rsultat
final
59
pile2
pile1
pile2
pile3
pile3
chanage pile2
sommet pile3
base pile3
sommet pile2
base pile2
queue
anne 2008
60
n-1
liste
queue
anne 2008
61
ptval
4
2
2
Il faut effectuer les modifications des pointeurs (1),
(2), (3), (4) et faire surtout attention effectuer (3),
(4) dans cet ordre.
Dans le cas de linsertion en tte, on obtient :
liste
ptval
ptval
Il suffit deffectuer (1), (2).
Si llment supprimer est le dernier, on a galement
deux :
- le dernier est aussi le premier : il suffit de se reporter au
cas prcdent.
- le dernier nest pas le premier :
ptval
P
1
1
2
Il faut effectuer les modifications (1), (2), (3), (4).
Lalgorithme : insertion dun lment avant une
valeur.
Programme ch424_1.c
4.2.4.2. Algorithme de suppression dune valeur.
On veut supprimer la premire occurrence de la
valeur val dans une liste chane bidirectionnelle.
On a trois cas : suppression du premier lment,
suppression du dernier lment et le cas gnral.
Supposons que ptval contienne ladresse de la
cellule supprimer.
anne 2008
62