各类运算符在内存中运算的优先级

运算符在数字中间的表达式称之为中缀表达式,比如  1+2

运算符在靴子后面的表达式称之为后缀(逆波兰表达式),比如12+

中缀表达式转后缀表达式

运算符 # ( */% +- )
栈内优先级 0 1 5 3 6
栈外优先级 0 6 4 2 1

 

准备一个栈和一个表,在中缀表达式的前后加上#。中缀表达式最初的符号入栈
循环(栈不为空)
{
	取中缀表达式的元素
	如果(元素是数字)
	元素入表
	反之//元素是符号
	{
		如果(当前元素的栈外优先级 > 栈顶元素的栈内优先级)
			当前元素入栈
		如果(当前元素的栈外优先级 > 栈定元素的栈内优先级)
			将栈顶元素出栈入表,若当前元素的栈外优先级>当前栈顶元素的栈内优先级,则当前元素入栈,反正重复这个过程
		如果(当前元素的栈外优先级 -- 栈顶元素的栈内优先级)
			弹出栈顶元素与当前元素相互抵消
	}
} //最后表中就是我们要求的后缀表达式

1-3*8/((4-2)*2+8/(2-4))  =>  138 * 42 - 2 */- 824 -/+

后缀表达式计算

准备一个栈
后缀表达式最初元素入栈
循环(栈不为空)
{
	取后缀表达式的元素
	如果(元素是数字)
		则元素入栈
	反之//元素是运算符
		则弹出栈顶两个数字进行运算,运算的结构再入栈
}
//最后一次运算的结果就是表达式的运算结果

 

本文链接:

https://www.bobsong.net/171.html
1 + 4 =
快来做第一个评论的人吧~