全球旧事资料 分类
1问题描述
(1)表达式求值问题表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:
1122743。中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:2274311)和前缀式(如:1122743)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。
2数据结构设计
(1)表达式求值问题
由于表达式中有字符与数字两种类型,故定义结点一个标志域data,标志结点存储的为字符data2还是数字data1,再寻找结点中对应的存储位置,读取数字域data1字符域data2。而在前缀表达式时,存在表达式逆序,因表达式类型不统一,用栈逆序极不方便,选择构建双向链表,存储表达式。
typedefstructNodei
tdatai
tdata1chardata2structNode
extL
ode
定义存储中缀表达式的结点类型
typedefstructNode2i
tdatai
tdata1chardata2structNode2
extstructNode2priorL
ode2
定义存储前缀表达式的结点类型
3运行、测试与分析
(1)表达式求值问题(1)按提示输入中缀表达式,如图11所示。如输入中缀表达式不正确,
提示输入有误,如图1213所示。
图11
f图12
图13(2)选择表达式转换并求值方式。按“1”选择中缀表达式求值,如图14所示。
图14(3)按“2”选择中缀表达式转变为后缀表达式并求值,如图15所示。
图15(4)按“3”选择中缀表达式转变为前缀表达式并求值,如图16所示。
附录:源代码
图16
f(1)表达式求值问题i
cludestdiohi
cludestdlibhdefi
eMAXNUM100typedefstructNodei
tdatai
tdata1chardata2structNode
extL
ode
定义存储中缀表达式的结点类型
typedefstructNode2i
tdatai
tdata1chardata2structNode2
extstructNode2priorL
ode2
定义存储前缀表达式的结点类型
typedefi
tselemtype1
定义运算数栈的结点
typedefstructselemtype1baseselemtype1topsqstack1
定义运算数栈的类型
voidI
itStack1sqstack1s新建一个空运算数栈sbaseselemtype1mallocMAXNUMsizeofselemtype1stopsbase
fifsbasepri
tf
好听全球资料 返回顶部