美文网首页算法和数据结构C++C语言数据结构
将中缀表达式转换为后缀表达式

将中缀表达式转换为后缀表达式

作者: tingshuo123 | 来源:发表于2017-06-28 22:34 被阅读335次

中缀表达式(infix):

数学里面的公式就是中缀表达式,是我们生活中里面常用的表达式,比如说 a*(b+c), 中缀表达式可以用括号来调整优先级。

后缀表达式(postfix):

运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不用考虑运算符的优先级),如 a*(b+c),转化为后缀表达式 即a b + 3 *

转换规则:

从头到尾读取中缀表达式中的每个对象, 对不同对象按不同情况处理。

  1. 运算数: 直接输出;
  2. 左括号: 压入堆栈;
  3. 右括号: 将栈顶的运算符弹出并输出, 直到遇到左括号( 出栈不输出;
  4. 运算符:
    • 优先级大于栈顶运算符时, 则把它压入栈;
    • 优先级小于等于栈顶运算符时,将栈顶运算符弹出并输出; 再比较新的栈顶运算符, 直到该运算符大于栈顶运算符优先级为止,然后将该运算符压入栈;
  5. 若将个对象处理完毕, 则把堆栈中存留的运算符一并输出

例如将中缀表达式2 * (9 + 6 / 3 - 5) + 4 转化为后缀表达式2 9 6 3 / + 5 - * 4 + 转换步骤如下:

  • 遇到数字 2, 直接输出

表达式:2
符号栈:

  • 遇到符号 * ,栈顶没有符号,直接入栈

表达式: 2
符号栈: *

  • 遇到符号 (, 压入栈

表达式:2
符号栈:* (

  • 遇到数字 9, 直接输出

表达式:2 9
符号栈:* (

  • 遇到符号 +( ) 里面的 +, 比外面的 * 优先级高, 压入栈

表达式:2 9
符号栈:* ( +

  • 遇到数字 6 , 直接输出

表达式:2 9 6
符号栈:* ( +

  • 遇到符号 \ ,优先级大于 +,压入栈

表达式:2 9 6
符号栈:* ( + \

  • 遇到数字 3, 直接输出

表达式:2 9 6 3
符号栈:* ( + \

  • 遇到符号 -, 优先级小于 \ , \ 弹出栈

表达式:2 9 6 3
符号栈:* ( +

  • 继续比较, + 优先级等于 -+弹出栈

表达式:2 9 6 3 \ +
符号栈:* (

  • 继续比较, - 优先级大于 (, 压入栈

表达式:2 9 6 3 \ +
符号栈:* ( -

  • 遇到数字 5, 直接输出

表达式:2 9 6 3 \ + 5
符号栈:* ( -

  • 遇到符号 ),将 (( 之前的的符号弹出栈

表达式:2 9 6 3 \ + 5 -
符号栈:*

  • 遇到符号 +, 小于 *, * 弹出栈

表达式:2 9 6 3 \ + 5 - *
符号栈:

  • 再比较,栈顶没有符号,直接压入栈

表达式:2 9 6 3 \ + 5 - *
符号栈:+

  • 遇到数字 4 直接输出

表达式:2 9 6 3 \ + 5 - * 4
符号栈:+

  • 处理完毕, 一并输出

表达式:2 9 6 3 \ + 5 - * 4 +
符号栈:

相关文章

  • 表达式树

    表达式树中缀表达式转换为后缀表达式后缀表达式总结

  • 四则运算(JAVA)

    计算过程 1.将四则运算串分割出中缀表达式2.将中缀表达式转换为后缀表达式3.对后缀表达式进行求值得出结果

  • 栈的应用

    中缀表达式转换为后缀表达式 后缀表达式 做数学运算时,经常使用的是中缀表达式,即“操作数 运算符 操作数”。在计算...

  • C语言中缀表达式计算器

    本文将介绍中缀表达式计算器的详细写法,是 C语言把中缀表达式转换为后缀表达式 和 C语言逆波兰计算器 的结合 ...

  • 四则运算表达式求值

    利用栈求解四则运算:求解思路为先将中缀表达式转换为后缀表达式,再利用后缀表达式求解中缀表达式:运算符出现在两个数字...

  • 数据结构与算法--后缀表达式

    中缀表达式转后缀表达式 中缀表达式转后缀表达式的思路步骤分析。 初始化一个栈和一个队列,运算符栈 S1 和存储中间...

  • 中缀表达式转后缀表达式并求值

    1.什么是中缀表达式?中缀表达式示例 2.什么是后缀表达式?后缀表达式示例 3.代码

  • C语言的基于栈实现的表达式求值

    一、目的 理解中缀表达式求值的过程 理解中缀转后缀表达式求值的过程 掌握堆栈的应用 二、问题描述 缀表达式,其中包...

  • C语言的基于栈实现的表达式求值

    一、目的 理解中缀表达式求值的过程 理解中缀转后缀表达式求值的过程 掌握堆栈的应用 二、问题描述 缀表达式,其中包...

  • 前缀,中缀,后缀表达式

    全文转载自:前缀、中缀、后缀表达式(逆波兰表达式),侵删。 前缀表达式,中缀表达式,后缀表达式都是四则运算的表达方...

网友评论

    本文标题:将中缀表达式转换为后缀表达式

    本文链接:https://www.haomeiwen.com/subject/dckpcxtx.html