数学表达式解析(前缀、中缀、后缀)

数学表达式解析(前缀、中缀、后缀)

ID:38522126

大小:37.98 KB

页数:15页

时间:2019-06-14

数学表达式解析(前缀、中缀、后缀)_第1页
数学表达式解析(前缀、中缀、后缀)_第2页
数学表达式解析(前缀、中缀、后缀)_第3页
数学表达式解析(前缀、中缀、后缀)_第4页
数学表达式解析(前缀、中缀、后缀)_第5页
资源描述:

《数学表达式解析(前缀、中缀、后缀)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、前缀、中缀、后缀表达式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3+4)×5-6就是中缀表达式-×+3456 前缀表达式34+5×6- 后缀表达式中缀表达式(中缀记法)中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要

2、先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值非常简单。前缀表达式(前缀记法、波兰式)前缀表达式的运算符位于操作数之前。前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素op次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。例如前缀表达式“-×+3456”:(1)从右至左扫描,将6、5、4、3压入堆栈;(2)遇到+运算符,因此弹出3和4(3为栈顶元素,4

3、为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈;(3)接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈;(4)最后是-运算符,计算出35-6的值,即29,由此得出最终结果。可以看出,用计算机计算前缀表达式的值是很容易的。将中缀表达式转换为前缀表达式:遵循以下步骤:(1)初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2)从右至左扫描中缀表达式;(3)遇到操作数时,将其压入S2;(4)遇到运算符时,比较其与S1栈顶运算符的优先级:(4-1)如果S1为空,或栈顶运算符为右括号“)”,则

4、直接将此运算符入栈;(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中的元素并输出,结果即为中缀表达式对应的前缀表达式

5、。例如,将中缀表达式“1+((2+3)×4)-5”转换为前缀表达式的过程如下:扫描到的元素S2(栈底->栈顶)S1(栈底->栈顶)说明55空数字,直接入栈-5-S1为空,运算符直接入栈)5-)右括号直接入栈454-)数字直接入栈×54-)×S1栈顶是右括号,直接入栈)54-)×)右括号直接入栈3543-)×)数字+543-)×)+S1栈顶是右括号,直接入栈25432-)×)+数字(5432+-)×左括号,弹出运算符直至遇到右括号(5432+×-同上+5432+×-+优先级与-相同,入栈15432+×1-+数字到达最左端5432

6、+×1+-空S1中剩余的运算符因此结果为“-+1×+2345”。后缀表达式(后缀记法、逆波兰式)后缀表达式与前缀表达式类似,只是运算符位于操作数之后。后缀表达式的计算机求值:与前缀表达式类似,只是顺序是从左至右:从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。例如后缀表达式“34+5×6-”:(1)从左至右扫描,将3和4压入堆栈;(2)遇到+运算符,因此弹出4和3(

7、4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈;(3)将5入栈;(4) 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈;(5)将6入栈;(6)最后是-运算符,计算出35-6的值,即29,由此得出最终结果。将中缀表达式转换为后缀表达式:与转换为前缀表达式相似,遵循以下步骤:(1)初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2)从左至右扫描中缀表达式;(3)遇到操作数时,将其压入S2;(4)遇到运算符时,比较其与S1栈顶运算符的优先级:(4-1)如果S1为空,或栈

8、顶运算符为左括号“(”,则直接将此运算符入栈;(4-2)否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意转换为前缀表达式时是优先级较高或相同,而这里则不包括相同的情况);(4-3)否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。