前言:
本来把这个表达式求值只是我们一次数据结构的简单实验但是把,刚开在脑子里构思的时候好好的
但是把每当自己亲手动手实验时你就会发现原来我有这么多的细节没有想到。所以说嘛,不能只停
留在思考和看懂的层面,你不动手实践的话你永远不知道你到底掌握到生么程度了。
实验目的:
1:加深对线性表的熟练度
2:掌握栈和对列的基本操作
实验原理:
1:四则运算规则:
先乘除 后 加减,有括号先算括号里面的。
2:运算符之间的优先关系
这个运算符之间的优先级关系,最开始我是觉得这个图没有什么好讲的但是由于我在上课时看到我们班的同学有很多看不懂这个图问老师老师他也不知道怎么解释,于是我就在这里解释一下吧!
我看了很多的博客他们都没有讲怎么看这个优先级关系图这里面把
我就拿我们本次的实验来说 上面不是有θ1和θ2吗看的方式是从左向右看 其中就拿第一个大于号
来说(就是第一行第一列中+所对应的)可以看作是θ1加号的优先级>θ2加号的优先级 这个解释过
后就拿我们的实验来说 因为我们本实验是需要创建两个栈的一个是符栈(用来存取字符的)一个
是数栈(用来存取数据和计算结果)
那么第一种理解方式:
我们就可以把θ1当作是符栈中的字符而。
把θ2当作是我们输入的表达式中的字符。
即一个是栈中的字符另一个是未入栈的字符。
第二种理解方式:
我们可以找到两个相连的字符。
把前面的那个当作θ1 后面的θ2来使用 进行比较。
我这我们本实验重难点的理解。
但是把 我这次写的代码没有使用这个图但是原理是相通的!
我相信你能看懂这个图之后也一定能看懂我的代码!
编写代码思路:
我们这个实验由于是和栈相关的实验,所以嘛!我们肯定会用到栈的相关操作,我们就这分析就会发现本实验我们需要两个栈 符栈 和 数栈 那么我们首先就需要
1:创建两个结构体
结构体中一个用来存储初始化符栈另一个用来存储初始化(这里说的不太严谨哈!)数栈
经过分析我们还需要有栈的入栈,出栈,取栈值,初始化。
2:创建两个栈的初始化方法
两个初始化 一个用于初始化 符栈 另一个用于初始化 数栈
3:创建两个入栈方法
两个入栈方法 一个用于 符栈的入栈 另一个用于 数栈入栈
4:创建两个出栈方法
两个出栈方法 一个用于 符栈出栈 另一个用于 数栈出栈
5:创建两个取值方法
两个取值方法 一个用于 符栈取值 另一个用于 数栈求值
注:(出栈和取值的区别
出栈:取出原来的栈顶元素的值,并删除栈顶元素,由洗一个元素顶替
取值:只获取栈顶元素的值,而不删除栈顶元素的值)
6:创建一个判断字符优先级方法
7:创建运算具体实验的方法(即+,-,*,/)
8:创建一个总的操作方法用于实现表达式求值
9:创建主函数
实验过程:
下面这张上图是借用我们上课用的ppt用来理解的