www.asia28365.com

当前位置:主页 > www.asia28365.com >

使用堆栈来实现表达式评估。

发布时间:2019-06-29 点击量:
使用堆栈来实现表达式评估。
一开始
如果你想实现一个识别表达式的简单计算器怎么办?
例如,用户的条目是:
3 + 5 *(2-4)
计算结果直接获得:-7。
对于人类,我们可以轻松计算,因为我们从左到右看。如果你查看它后面的括号,你会发现括号中的计算具有最高优先级。最后,计算Adition以获得最终结果。
后缀类型
实际上,相同的订单可用于计算机。首先,记录3存储为a,然后作为5,b作为b,用c计算2-4的结果,然后计算b * c以存储d,最后a +d计算。
该计算过程的操作顺序可以描述如下(将操作符号放在操作数之后):
3524- * +
这种表示法称为后缀或反向波兰表示法(通常用中文表示),您需要使用括号来指示首先完成表达式的哪一部分它具有的特点。这几乎与计算机处理它的方式相同。
使用上面显示的堆栈很容易评估这种表示法,但前提是中缀是第一次后固定的。
这种类型的转换也可以使用上面介绍的堆栈C语言实现或树。由于篇幅限制,本文不打算介绍。
接下来,我将介绍如何使用中缀方法进行评估。
在堆栈上评估中缀
如上所述,所谓的中缀表达式是我们可以看到的常用表达式,并且会对中缀表达式进行求值。也就是说,直接评估输入表示。
为简单起见,假设仅包括加法,减法,乘法和括号,所有操作数都是正整数,并且不包含更复杂的数据或操作。
计算思路:
Stack0用于存储操作数,stack1用于存储使用两个电池的操作员
从左向右扫描以在堆栈0中查找操作数
如果找到运算符,如果优先级低于upper运算符的优先级,则删除stack0中的两个元素进行计算,推送push0,并与上层运算符进行比较的优先级它继续。
如果找到的运算符的优先级高于顶级运算符,则直接加载堆栈1。
在堆栈1上直接找到左括号并找到右括号后,直接显示并计算它,直到找到左括号。
上面的想法可能不是很清楚,如果你想评估以下公式,我们举一个简单的例子:
6 *(2 + 3)* 8 + 5
从左到右开始扫描。
首先,找到操作数6和运算符*(每个stack0)。
堆栈顶部