4张图快速掌握前、中、后缀表达式的转换

目录

  1. 表达式的说明介绍
  2. 中缀快速转前、后缀表达式
  3. 前、后缀快速转中缀表达式
  4. 程序源代码

一 表达式介绍

表达式为波兰数学家提出,分为以下三种:

1.中缀表达式

即我们常见的数学表达式,如:
4 * (3 + 2) - 6

2.前缀表达式

又称为波兰表达式,即运算符写在数字前面的,如:
- * 4 + 3 2 6

3.后缀表达式

又称为逆波兰表达式,即运算符写在数字前面的,如:
4 3 2 + * 6 -

二 中缀快速转前、后缀表达式

为了让你快速掌握前中后缀表达式转换,我们这里只讲解快速转换的方法,具体原理不多解释。

1 中缀转前缀表达式

先看中缀转前缀表达式的过程图,
再看后面的解释。

4张图快速掌握前、中、后缀表达式的转换

中缀转前缀表达式的三个步骤:

  1. 每个运算都加小括号,有就不用再加
  2. 运算符移至括号左侧,每个括号内都只有1个运算符,不会乱。
  3. 去除所有括号,完成中转前缀表达式。

2 中缀转后缀表达式

先看中缀转前缀表达式的过程图,
再看后面的解释。

4张图快速掌握前、中、后缀表达式的转换

中缀转后缀表达式的步骤与之前差不多,
只是这是将运算符移到括号的右侧。

三 前后缀快速转中缀表达式

1 前缀转中缀表达式

使用栈进行前缀转中缀表达式

4张图快速掌握前、中、后缀表达式的转换

前缀转中缀表达式的规则:

  1. 从后往前开始遍历
  2. 遇数字就进栈,遇符号就运算
  3. 计算列式:
    (后入栈数) (运算符) (先入栈数)
  4. 计算结果入栈
  5. 继续……

2 后缀转中缀表达式

使用栈进行后缀转中缀表达式

4张图快速掌握前、中、后缀表达式的转换

后缀转中缀表达式的规则,与前转中相反:

  1. 从前往后开始遍历
  2. 遇数字就进栈,遇符号就运算
  3. 计算列式:
    (先入栈数) (运算符) (后入栈数)
  4. 计算结果入栈
  5. 继续……

.

Python与C++的源代码

前缀表达式转中缀表达式,Python版:

def prefix_to_infix(s):
    list1 = []
    for c in reversed(s):
        if c in ["+","-","*","/"]:
            op1 = list1.pop()
            op2 = list1.pop()
            temp = '(' + op1 + c + op2 + ')'
            list1.append(temp)
        else:
            list1.append(c)
    return list1.pop()

prefix = '-*4+326'
print('前缀表达式:', prefix)
infix = prefix_to_infix(prefix)
print('中缀表达式:', infix)

前缀表达式转中缀表达式,C++版:

#include <iostream>
#include <stack>
#include <string>
using namespace std;

bool isOperator(char c) {
    return c == '+' || c == '-' || c == '*' || c == '/';
}

string prefixToInfix(string prefix) {
    stack<string> s;
    for (int i = prefix.length() - 1; i >= 0; i--) {
        char c = prefix[i];
        if (isOperator(c)) {
            string op1 = s.top();
            s.pop();
            string op2 = s.top();
            s.pop();
            string temp = "(" + op1 + c + op2 + ")";
            s.push(temp);
        } else {
            s.push(string(1, c));
        }
    }
    return s.top();
}

int main() {
    string prefix = "-*4+326";
    cout << "Prefix expression: " << prefix << endl;
    string infix = prefixToInfix(prefix);
    cout << "Infix expression: " << infix << endl;
    return 0;
}

本文结束

如有疑问,请直接留言!必回!
如有帮助,请点赞转发!感谢!

我用实战的方法自学了多种编程语言,
希望把实战速学的方法传播给更多的人,
你的一赞之力就能让更多人看到。

关注Python入门速学
带你实战快速学Python


原文始发于微信公众号(Python入门速学):4张图快速掌握前、中、后缀表达式的转换

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/236412.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!