目录
-
表达式的说明介绍 -
中缀快速转前、后缀表达式 -
前、后缀快速转中缀表达式 -
程序源代码
一 表达式介绍
表达式为波兰数学家提出,分为以下三种:
1.中缀表达式
即我们常见的数学表达式,如:4 * (3 + 2) - 6
2.前缀表达式
又称为波兰表达式,即运算符写在数字前面的,如:- * 4 + 3 2 6
3.后缀表达式
又称为逆波兰表达式,即运算符写在数字前面的,如:4 3 2 + * 6 -
二 中缀快速转前、后缀表达式
为了让你快速掌握前中后缀表达式转换,我们这里只讲解快速转换的方法,具体原理不多解释。
1 中缀转前缀表达式
先看中缀转前缀表达式的过程图,
再看后面的解释。
中缀转前缀表达式的三个步骤:
每个运算都加小括号,有就不用再加 运算符移至括号左侧,每个括号内都只有1个运算符,不会乱。 去除所有括号,完成中转前缀表达式。
2 中缀转后缀表达式
先看中缀转前缀表达式的过程图,
再看后面的解释。
中缀转后缀表达式的步骤与之前差不多,
只是这是将运算符移到括号的右侧。
三 前后缀快速转中缀表达式
1 前缀转中缀表达式
使用栈进行前缀转中缀表达式
前缀转中缀表达式的规则:
从后往前开始遍历 遇数字就进栈,遇符号就运算 计算列式:
(后入栈数) (运算符) (先入栈数)计算结果入栈 继续……
2 后缀转中缀表达式
使用栈进行后缀转中缀表达式
后缀转中缀表达式的规则,与前转中相反:
从前往后开始遍历 遇数字就进栈,遇符号就运算 计算列式:
(先入栈数) (运算符) (后入栈数)计算结果入栈 继续……
.
四 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