算数运算的后缀表达式和中缀表达式

后缀表达式求值

后缀表达式又叫逆波兰表达式,其求值过程可以用到栈来辅助存储。例如要求值的后缀表达式为:1 2 3 + 4 * + 5 -
遍历表达式,遇到数字时直接入栈,遇到操作符时,则将栈顶和次栈顶元素出栈与操作符进行运算,然后将结果压如栈中。
当表达式都遍历完时,此时栈顶元素即为表达式的结果。

后缀表达式的特点如下:

1、后缀表达式的操作数与中缀表达式的操作数先后次序相同,而运算符的先后次序不同。
2、后缀表达式中没有括号,而且运算符没有优先级。
3、后缀表达式计算过程严格按照从左到右的顺序进行。

中缀表达式转后缀表达式

中缀表达式为我们人类能识别的方式,而后缀表达式是计算机进行运算的方式(即我们上述的过程)。

转换规则

1)我们使用一个stack栈结构存储操作符,用一个List结构存储后缀表达式结果
2)首先读取到数字,直接存入list中
3)当读取到左括号"(“时,直接压栈,当读取到运算符时,分两种情况讨论
a.当运算符栈为空或者栈顶操作符的优先级小于当前运算符优先级时(如+和-的优先级低于 * 和 /),直接入栈
b.当运算符栈不为空时且栈顶操作符的优先级大于或等于当前运算符优先级时,循环执行出栈操作并加入list中,直到遇到优先级小于当前运算符的元素为止。循环执行完后再将当前运算符压栈。另外需要注意的是,只有遇到右括号时,左括号才出栈
4) 当遇到右括号”)"时,循环执行出栈操作并加入到list中,直到遇到左括号为止。并将左括号弹出,但不加入list中
5) 表达式的值读取完后,将操作符栈中的所有元素弹出并加入到list中

执行完上面步骤后,list中存储的顺序即为我们转换后的后缀表达式的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值