【经典算法】-算术表达式求值
来源:互联网 发布:开发板与单片机 编辑:程序博客网 时间:2024/04/28 03:52
算术表达式求值
中缀表达式
我们平时写的计算式的式子一般是这样子
格式:"操作数1 操作符 操作数2" 12 * (3 + 4) - 6 + 8 / 2; // 中缀表达式
中缀表达式如果要先计算操作符优先级低的两个数,比如上面要优先计算3+4,这里就必须带括号,指明计算的优先级,负责就会按照操作符默认的优先级来计算。
后缀表达式(逆波兰表达式)
上面的中缀表达式转换为后缀表达式即
格式:"操作数 操作符"12 3 4 + * 6 - 8 2 / +; //后缀表达式
怎样把中缀表达式转换为后缀表达式,在下面解释,这里先看看后缀表达式是如何计算的呢?
后缀表达式如何计算表达式
这里栈就派上用场了,从左到右一个个遍历表达式,遇到操作数就入栈,遇到操作符就依次取出栈顶的两个操作数进行计算,并把计算结果入栈,供后面计算,直到栈为空,说明表达式计算完毕,否则说明表达式有问题。过程如下图:
这样就可以按照操作符顺序计算,不用担心操作符优先级还要加大括号的问题。
那如何把中缀表达式转换为后缀表达式
- 思想:
- 从中缀表达式中从左往右依次取出数据
- 如遇到操作数,直接输出到后缀的队列里。
- 如果遇到操作符(包括括号),这里再定义一个存放操作符的栈,则:
i.如果操作符是'(',入栈
ii.如果操作符是')',则把栈里的操作符依次出栈并插入到后缀序列后面,直到遇到')'.
iii.如果操作符不是‘(’和‘)’,则:
(1). 如果操作符的优先级比top的优先级高,则入栈
(2).如果操作符优先级等于或小于top优先级,则将top出栈并插入到后缀序列后面,pop后,再比较栈顶元素的优先级,重复iii,直到把此操作符 插入,将此操作符入栈。- 如果中序队列里的数据已经读取完毕,记录操作符的栈里,还有操作符的话,依次出栈插入到后缀序列的后面。
此时中缀就已经转换为后缀表达式,如下图
代码实现链接:点击打开github
阅读全文
0 0
- 经典算法-算术表达式求值
- 经典算法-算术表达式求值
- 经典算法-算术表达式求值
- 经典算法-算术表达式求值
- 【经典算法】-算术表达式求值
- 算法 -- 双栈算术表达式求值算法
- 双栈算术表达式求值算法
- 双栈算术表达式求值算法
- Dijkatra 迪克斯特拉双栈算术表达式求值算法 Java
- Dijkstra双栈算术表达式求值算法
- Dijkstra双栈算术表达式求值算法
- 表达式求值的经典算法
- 算术表达式求值
- C#算术表达式求值
- 算术表达式求值
- 字符串算术表达式求值
- 算术表达式求值
- 算术表达式求值
- Incorrect string value: '\xF0\x9F\x92\x8B \xF0...' for column nickanme
- HSF 淘宝框架的使用
- JNI访问Java中各方法
- 安装npm install时,长时间停留
- java获取当前时间的几种方法
- 【经典算法】-算术表达式求值
- 十分钟看懂JS
- showModalDialog弹层
- Java中的集合框架
- 烟台大学官网仿写
- slatstack中的远程执行命令的方法
- Cisco Catalyst Vs. Small Business Switches
- sparkSQL1.1入门
- 习题1.5