TypeIsEmptyco
st
retur
top1
templateclassType
i
tStackTypeGetTopTypex
ifIsEmptyretur
0
xelemstopretur
1
classCalculate运算类
private
charch
charleftri
gt双目运算符的左右操作数charOperator运算符‘’‘’‘’‘’‘’‘’public
i
tIsOperatorcharoper是否是运算符
charAdva
cedcharoper1charoper2判断运算符的优先级
i
tOperatei
tleftcharthetai
tright
i
tOperate1i
t
um
i
tRu
chara100
i
tCalculateOperatei
tleftcharthetai
tright双目运算符求值
switchtheta
case
retur
leftright
case
retur
leftright
default
fretur
0
i
tCalculateOperate1i
t
um单目运算符
retur
um
charCalculateAdva
cedcharoper1charoper2运算符的优先级
switchoper1
case
switchoper2
case
retur
case
retur
case
retur
case
retur
case
retur
case
retur
case
switchoper2
case
retur
case
retur
case
retur
case
retur
case
retur
case
retur
fcase
switchoper2
case
retur
case
retur
case
retur
case
retur
case
retur
case
retur
caseswitchoper2
case
retur
case
retur
case
retur
case
retur
case
retur
case
retur
e
caseswitchoper2
case
retur
case
retur
case
retur
case
retur
e
case
fretur
case
retur
case
switchoper2
case
retur
case
retur
case
retur
case
retur
case
retur
e
case
retur
retur
e
i
tCalculateIsOperatorcharoper判断是否是字符
ifoperoperoperoperoperoper
retur
1
else
retur
0
i
tCalculateRu
chara100
i
ttem0
Stackcharoptr
Stacki
top
d
charch
i
t
umleftright
chartheta
optrPush
chatem
optrGetToptheta
whilethetach
f
ifIsOperatorch
switchAdva
cedthetach
case前一个运算符优先级低压栈optrPushch
chatem
break
case前一个运算符优先级高进行运算iftheta如果是进行单目运算
op
dPopright
optrPoptheta
op
dPushOperate1right
else否则双目运算
op
dPopright
op
dPopleft
optrPoptheta
op
dPushOperateleftthetaright
break
case
optrPoptheta
chatem
break
else如果是命题变元初值入栈
umatem0
op
dPush
um
chatem
optrGetToptheta
op
dPop
um
retur
um
i
tmai
chara100储存命题变元
charc100保存表达式
chard100保存表达式
fi
ta
s1000保存真值表答案
i
tb1000100cou
t保存命题变元初值
cout