表达式求值

表达式求值时对数据结构中栈结构的灵活应用,对于一个表达式而言,它由操作数和运算符组合而成,我们现实中常见的表达式:A+B-C,类似这种格式的我们称之为中缀表达式,但是,计算机的计算方式是有别于人的,所以,我们可以先将表达式转换为后缀表达式,再对后缀表达式进行计算,这个过程就是我们常用的表达式求解的过程。

首先,我们要解决的问题是如何将中缀表达式转换成后缀表达式。下面是相关算法:

遍历表达式,

① 从左向右依次取得字符ch并进行判断

②如果ch为操作数,则直接将该操作数拼接到后缀表达式output中(初始状态为"")。

③如果ch为运算符,则进行以下操作:

     a、如果data='(',直接将'('入运算符栈。

     b、如果data=')',依次弹出运算符栈中的栈顶元素,知道弹出'('为止。

     c、如果不是a、b两种情况,则将ch与栈顶元素比较优先级

            如果ch优先级高,或者栈为空,那么直接将ch入栈

            否则,先将栈顶元素弹到output上,再将ch入栈

④如果,字符串遍历结束后,运算符栈不为空,则依次将栈顶元素弹出到output上。

实例 a+b-c

读取a,为操作数,output=a

读取+,为运算符,属于情况c,直接入栈

读取b,为操作数,output=ab

读取-,为运算符,属于情况c,将栈顶元素弹出,再将-压栈,output=ab+

读取c,为操作数,output=ab+c

遍历结束,栈不为空,依次弹出

output=ab+c-


当表达式转换成后缀表达时,计算将变得非常简单,下面是计算后缀表达式的算法:

1,设置一个栈用于存储操作数,栈初始化为空,然后从左到右扫描后缀表达式。

2,若ch为操作数,则进栈

     若ch为运算符,则从栈中退出两个元素,先退出的放到运算符的左边,后弹出的放到运算符的右边,进行计算,并将运算结果压入栈中。

3,直到后缀表达式扫描结束,此时栈中只剩下一个元素,即为运算结果。


程序源码如下:

程序源码点这里


csdn链接:https://blog.csdn.net/Taylar_where/article/details/81281529

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容