例如给出一个计算公式:2-3*4+5
其中2、3、4、5属于操作数;-、*、+属于操作符。考虑到操作符的优先级,当我们读取这个公式时,需要将其重新写成计算机可以读取的形式,如234*-5+(遇见一个操作符号,就将符号前面紧挨着的两个元素进行运算)如图:
如果是直接针对2-3*4+5,在这里需要两个栈s1和s2,遇见操作数则将其入栈s1,遇到操作符则将其入栈s2,同时要注意,当栈s2不为空时,即将入栈的操作符的优先级如果低于栈顶的操作符的优先级,那么就将栈s2的栈顶操作符拿来运算,运算时,该操作符右边的数则为栈s1的栈顶元素,左边的数则为栈s1的栈顶元素的下一个元素,它们的计算结果则入栈s1,继续如此进行运算直到结束。作图如下: