中序表达式转逆波兰表达式(你嫌弃波兰~抛弃疗窝喔~)个位数简化版

本文介绍如何将中序表达式转化为逆波兰表达式,通过维护两个栈S1和S2,遵循运算符优先级规则进行转换。详细阐述了遇到不同元素(数字、括号、运算符)时的操作步骤,并提供了一个示例表达式的转化过程。
摘要由CSDN通过智能技术生成

将一个中序表达式转化成为逆波兰表达式。

       首先维护的是两个栈,我们这里暂且称为S1和S2,S1中的结果最后存的就是逆波兰表达式,S2中将用于暂时存放运算符并且在最终形成逆波兰表达式的时候,该栈是会清空的。下面我们看看怎样具体的形成逆波兰表达式。

       在此首先定义一下运算符的优先级关系,从小到达排序,相同优先级没有用逗号隔开:(,+-,*\,负号,)。

       从左至右遍历一个给定的中序表达式,也就是我们常规的数学计算的表达式。

(1)如果遇到的是数字,我们直接加入到栈S1中;

(2)如果遇到的是左括号,则直接将该左括号加入到栈S2中;

(3)如果遇到的是右括号,那么将栈S2中的运算符一次出栈加入到栈S1中,直到遇到左括号,但是该左括号出栈S2并不加入到栈S1中;

(4)如果遇到的是运算符,包括单目运算符和双目运算符,我们按照下面的规则进行操作:

          (1)如果此时栈S2为空,则直接将运算符加入到栈S2中;

          (2)如果此时栈S2不为空,当前遍历的运算符的优先级大于等于栈顶运算符的优先级,那么直接入栈S2;

          (3)如果此时栈S2不为空,当前遍历的运算符的优先级小于栈顶运算符的优先级,则将栈顶运算符一直出栈加入到栈S1中,直到栈为空或者遇到一个运算符的优先级小于等于当前遍历的运算符的优先级,此时将该运算符加入到栈S2中;

(5)直到遍历完整个中序表达式之后,栈S2中仍然存在运算符,那么将这些运算符依次出栈加入到栈S1中,直到栈为空。

来源:http

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值