将一个中序表达式转化成后缀表达式
后缀表达式,运算符在后,操作数在前的式子。(1+2)*(3-5)的后缀表达式就是12+35-*。可以发现表达式中没有括号了,也就是说计算机处理这个表达式的时候就不需要考虑优先级的问题了。
操作步骤:
1、首先准备一个栈opStack用于存储运算符,一个队列reversePolish用于存储逆波兰式
2、从左向右开始读取算术表达式的元素X,分以下情况进行不同的处理:
(1)如果X是操作数,直接入队(reversePolish)
(2)如果X是运算符:再分以下情况:
1)如果栈为空,直接入栈。
2)如果X==”(“,直接入栈。
3)如果X==”)“,则将栈里的元素逐个出栈,并入队到逆波兰式队列中,直到第一个配对的”)”出栈(注:“(”和“)”都不入队)
4)如果X是其他操作符,若X优先级大于栈顶元素,直接入栈。否则出栈直到X大于栈顶元素。
当读取完中序表达式后,转化好的逆波兰式就存储在队列里了。