本文博文主要解决几个问题:
1、骑马订式后缀式
2、骑马订前缀式
3、后缀式改为骑马订式
1、将骑马订表达式转换为后缀表达式的方法有两种。 请假设有骑马式a:1((2)3)4)5,将其转换为后缀式。
方法一:直接转换法
(1)首先,决定式a的运算顺序,加上括号。 ) ) ) ) ) () ) )4) )- 5 ) )。
)2)从最里面的括号开始运算,转换为后缀表达式的方法是,(忽略括号)数字在前,符号在后。
1 ) )2)=23
2 ) ) (2)3) )4) )2 3 ) )。
3 ) )1((2)3) )4) [按运算顺序从左到右排列]
4 ) (1) (2)3)4) )5)=123 )4)5-
后缀的表达式为1234 * 5
方法二:利用表达式树
首先将骑马订表达式转换为表达式树,然后依次遍历表达式树以生成后缀表达式。
如何将骑马订表达式转换为表达式树。 表达式树的叶是操作数,其他节点是操作数,根节点是优先级最低且位于右边的操作符。 例如,上述表达式的优先级最低的是-,而-位于最右边,因此根为-。 (不包括括号。 上述公式的公式树如下。
假设有骑马订表达式转换的表达式树2,骑马订表达式转换为前缀表达式的有骑马订表达式1 ()2(3)4)- 5。 请转换为前缀表达式。
方法一:直接转换法
(1)首先,决定式a的运算顺序,加上括号。 ) ) ) ) ) () ) )4) )- 5 ) )。
)2)从最里面的括号开始运算并转换为前缀表达式的方法是,(忽略括号)符号在前,数字在后。
1 ) )2)=23
2 ) ((2)3) )4)=* 234
3 ) )1()2)3)4) )= 1* 234
4 ) ) (1) (23 )4) )5)=- 1* 2345
前缀表达式为- 1* 2345
方法二:利用表达式树
首先将骑马订表达式转换为表达式树,然后依次遍历表达式树以创建前缀表达式。
如何将骑马订表达式转换为表达式树。 表达式树的叶是操作数,其他节点是操作数,根节点是优先级最低且位于右边的操作符。 例如,上述表达式的优先级最低的是-,而-位于最右边,因此根为-。 (不包括括号。
经过前面的路径得到的前缀表达式是- 1 * 2 3 4 5
3、后缀式骑马订式请假设有后缀式1234 * 5,转换为前缀式。
利用表达式树:
从左到右扫描面的后缀表达式。 一次读取一个符号的表达式。 如果符号是操作数,则创建单节点树并将其推送到堆栈中。 如果符号是操作符,则从堆栈中弹出两棵树T1和T2,T1先弹出,形成新树。 这棵树的根是操作员,其左、右儿子分别是T2和T1。 然后,将指向这棵新树的指针推入堆栈。
因为扫描123之后的前三个符号是操作数,所以创建三个单节点树,并将指向它们的指针推入堆栈。
扫描后将读取“”,因此指向最后两棵树的指针将弹出,形成新树,并将指向新树的指针推入堆栈。 以下流程图以相同的原理执行。
扫描4和*后扫描和5后
扫描-扫描最后一次中继得到的表达式树,得到所需的中继表达式。 1 () (2)3) *4)-5