最近在看《数据结构与算法的JavaScript描述》这本书,第四章栈的练习中有这么一题:“设计并实现一个JavaScript函数,该函数可以将中缀表达式转换为后缀表达式,然后利用栈对该表达式求值。”于是就有了这篇博客,记录这个算法的实现。
算法分析
参考详解如何将中缀表达式转化为后缀表达式
中缀表达式转后缀表达式遵循的规则:
1、任何中缀表达式都由运算数、运算符、括号这三部分组成。
2、从中缀表达式的左边开始扫描,遇到运算数时,直接将其输出,不压入堆栈。
3、若遇到左括号,则将其压入堆栈。
4、若遇到右括号,表示括号内的中缀表达式已经扫描完毕,这时需要将栈顶的运算符依次弹出并输出,直至遇到左括号,左括号弹出不输出。
5、若遇到的是运算符:如果该运算符的优先级大于栈顶运算符的优先级时,将其压入堆栈,否则,将栈顶运算符弹出并输出,接着和新的栈顶运算符比较,若大于,则将其压栈,若小于,继续将栈顶运算符弹出并输出…..一直敌对下去,直至当前运算符大于栈顶运算符位置。
6、最后一步,若扫描到中缀表达式的末尾(即扫描结束),若堆栈中还有存留的运算符依次弹出并输出即可。
知道了上面这些规则,下面就可以开始写代码了。
代码实现
|
|