本文章的解决方法参考了《大话数据结构》中关于栈的应用介绍
值得注意的是,书中关于中缀表达式转后缀的讲解中不尽清楚。本人也在这里花了点时间进行推敲错误的原因,也在网上搜到了这篇文章,比较好地介绍了中缀转后缀的的规则
原理:
用计算机求解四则运算,可以使用栈。因为栈的“先进后出”的特性正好满足了能通过后缀表达式去计算出四则运算式子的结果。而后缀表达式的转化也能使用栈对中缀表达式进行操作从而转化。明显地,由中缀表达式-》后缀表达式, 后缀表达式-》式子结果。 都需要使用到栈。所以编码实现中,我们着重的是实现这两个过程的函数(infix_to_suffix()、suffix_to_result())
注意:
测试数据
- 每个数可以是只达个位的数,也可以达十位以上的数
- 可以是负数或正数(负数需在两边添加括号)
- 括号内能存在多个括号,例:( ( 2 + 3 ) + ( 4 + 5 ) + ( ( 6 + 7 ) + 8 ) )
实现
- 定义了一个全局table用来存储各个运算符的优先级。 + - 等优先级,* / 等优先级, ()不存在优先级