中缀表达式/后缀表达式/前缀表达式

1:什么是中缀表达式,前缀表达式,后缀表达式?

正如我们常常潜意识认为我们所说的数字都是十进制,对于数字的其他进制感觉不正确一样,其实只是我们不熟悉而已,其他进制其实也不过就是一种对数据的表达方式而已。对于我们的表达式也是一样。

eg:表达式2*3+(5-7);

我们上面所看到的也就是我们平时常用的书写表达式的方式就是我们所谓的“中缀表达式”

前缀表达式与后缀表达式都是一种没有括号的算术表达式,两者都与中缀表达式有所不同。前缀表达式其将运算符写在前面,操作数写在后面。后缀表达式其将运算符写在后面,操作数写在前面。

2:中缀表达式如何转化为前缀表达式与后缀表达式?

这里我给出一个中缀表达式:a+b*c-(d+e)

<1>第一种方法
第一步:按照运算符的优先级对所有的运算单位加括号       式子变成:((a+(b*c))-(d+e))

第二步:转换前缀与后缀表达式

  •  前缀

把运算符号移动到对应的括号前面,则变成了:-(+(a*(bc))+(de)),去掉括号即前缀式: - + a * b c + d e

  • 后缀

把运算符号移动到对应的括号后面,则变成了:((a(bc)* )+(de)+ )-,去掉括号即后缀式:a b c * + d e + -  

我们发现前缀式,后缀式他们都是不需要用括号来进行优先级的确定的。

<2>第二种方法

  • 前缀

(1) 需要申请两个栈:s1(存放数字)、s2(存放运算符);

(2) 从右边开始遍历表达式,数字放在s1中,运算符放在s2中;其中运算符放入法则:①如果s2当前是空的或者栈顶元素是“)”,直接放入;②如果当前的运算符优先级大于或者等于栈顶元素优先级,直接放入;③如果当前运算符优先级小于栈顶元素优先级,栈顶元素出栈并放入s1;④遇到“(”运算符出栈放入s1,直到遇到“)”,将“()”丢弃。

(3) 将s2中元素出栈放入s1中;

(4)s1中元素出栈重新组成表达式。

三、如何计算前缀表达式和后缀表达式

1、计算前缀表达式

计算值从右往左,数字出栈从左往右

2、计算后缀表达式

计算值从左往右,数字出栈从右往左

  • 后缀

3:前缀表达式与后缀表达书如何转化为中缀表达式?

对于上面所举的例子,其前缀表达式是:+ * 2 3 - 5 7      后缀表达式是  2 3 * 5 7 - + 

猜你喜欢

转载自blog.csdn.net/Eunice_fan1207/article/details/83063952