前缀、中缀和后缀表达式的区别与转换 您所在的位置:网站首页 前缀表达式怎么计算 前缀、中缀和后缀表达式的区别与转换

前缀、中缀和后缀表达式的区别与转换

2024-07-12 23:52| 来源: 网络整理| 查看: 265

一、前缀表达式

前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前。

1、求前缀表达式计算值的步骤:

(1)从右到左扫描表达式,遇到数字时直接入栈,遇到运算符时弹出栈顶两个数; (2)根据运算符对两个数进行相应计算(栈顶元素 op 次顶元素),并将计算结果入栈; (3)重复上述过程直至表达式的最左端,剩余最后一个数在栈中弹出即为最终计算结果。

现以(3+4)×5-6 为例,其对应的前缀表达式就是 - × + 3 4 5 6。

(1) 从右至左扫描”- × + 3 4 5 6“,将数字6、5、4、3压入栈; (2) 遇到+运算符,弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4=7,将7入栈; (3) 遇到×运算符,弹出7和5,计算出7×5=35,将35入栈; (4) 最后遇到-运算符,计算出35-6=29,即为最终结果。

2、将中缀表达式转换为前缀表达式

(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从右至左扫描中缀表达式; (3) 遇到操作数时,将其压入S2; (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈; (4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1; (4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较; (5) 遇到括号时: (5-1) 如果是右括号“)”,则直接压入S1; (5-2) 如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃; (6) 重复步骤(2)至(5),直到表达式的最左边; (7) 将S1中剩余的运算符依次弹出并压入S2; (8) 依次弹出S2中的元素并输出,结果即为中缀表达式对应的前缀表达式。

将中缀表达式“1+((2+3)×4)-5”转换为前缀表达式的过程如下: 在这里插入图片描述

二、中缀表达式

中缀表达式是一种通用的算术或逻辑公式表示方法,运算符处于操作数的中间,中缀表达式是人们常用的算术表示方法。

虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。

(3+4)×5-6 即为一个中缀表达式。

三、后缀表达式

后缀表达式又称逆波兰表达式,与前缀表达式相似,但运算符位于操作数之后。

1、求后缀表达式计算值的步骤:

(1)从左到右扫描表达式,遇到数字时直接入栈,遇到运算符时弹出栈顶两个数; (2)根据运算符对两个数进行相应计算(次顶元素 op 栈顶元素),并将计算结果入栈; (3)重复上述过程直至表达式的最右端,剩余最后一个数在栈中弹出即为最终计算结果。

现以(3+4)×5-6 为例,其对应的前缀表达式就是3 4 + 5 × 6 -。

(1) 从左至右扫描“3 4 + 5 × 6 -”,将3和4压入栈; (2) 遇到+运算符,弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4=7,将7入栈; (3) 将5入栈; (4) 遇到×运算符,弹出5和7,计算出7×5=35,将35入栈; (5) 将6入栈; (6) 最后遇到-运算符,计算出35-6=29,即为最终结果。

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

(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2; (2) 从左至右扫描中缀表达式; (3) 遇到操作数时,将其压入S2; (4) 遇到运算符时,比较其与S1栈顶运算符的优先级: (4-1) 如果S1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; (4-2) 否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况); (4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较; (5) 遇到括号时: (5-1) 如果是左括号“(”,则直接压入S1; (5-2) 如果是右括号“)”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到左括号为止,此时将这一对括号丢弃; (6) 重复步骤(2)至(5),直到表达式的最右边; (7) 将S1中剩余的运算符依次弹出并压入S2; (8) 依次弹出S2中的元素并输出,结果的逆序即为中缀表达式对应的后缀表达式(转换为前缀表达式时不用逆序)。

将中缀表达式“1+((2+3)×4)-5”转换为后缀表达式的过程如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有