原理
利用栈实现简单的四则运算分为两步:
第一步-将中缀表达式转换为后缀表达式形式
用二叉树来存储表达式
例如:a×(b+c)-d 用二叉树可以表示为:
对其进行后序遍历得到后缀表达式为:
abc+×d-
用二叉树可以很形象的表示一个表达式,不过本文用栈来进行转换
用栈实现将中缀表达式转换为后缀表达式形式
(1)从左到右逐个扫描中缀表达式中的各项,如果到达末尾则跳转转到(6),否则根据(2)~(5)的描述进行操作;
(2)遇到操作数直接输出;
(3)遇到运算符(设为a),则和栈顶的操作符(设为b)比较优先级,若a小于等于b的优先级,则连续出栈输出,直到a大于b的优先级或b为(
,a进栈;
(4)遇到(
,进栈;
(5)遇到)
,则连续出栈输出,直到遇到左括弧(
为止。其中,(
出栈但是并不输出;
(6)输出栈中剩余的操作符。
第二步-利用后缀表达式计算结果
(1)从左到右逐个扫描后缀表达式中的各项,如果到达末尾则进行(4),否则根据(2)~(3)的描述进行操作;
(2)遇到操作数直接入栈;
(3)遇到运算符(设为ope)则出栈两次,设第一次出栈为a,第二次出栈为b,则计算结果c = b ope a,将c入栈;
(4)弹出栈内元素即为结果。
手工演算
代码实现-js版
1 | // 栈 |