用两种方式实现表达式自动计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用两种方式实现表达式自动计
算(总9页)
-CAL-FENGHAI.-(YICAI)-Company One1
-CAL-本页仅作为文档封面,使用请直接删除
数据结构(双语)
——项目文档报告用两种方式实现表达式自动计算
专业:计算机科学与技术
班级: 14接计
指导教师:
姓名:
学号:
目录
一、设计思想 (03)
二、算法流程图 (04)
三、源代码 (06)
四、运行结果 (13)
五、遇到的问题及解决 (14)
六、心得体会 (15)
一、设计思想
1.中缀转换后缀:
⑴定义两个栈S1,与S2。

S1主要管转换专用,S2主要管计算专用。

⑵扫描字符串,如果是字符或者小数的,直接进栈。

⑶如果是“(”,同直接进栈,直到遇到“)”,为止。

⑷开始处理运算符。

⑸如果栈定的运算符的优先级低于读到的那个,那么就直接进栈,否则把栈里的都进数组里。

⑹运算完,直到读完为止。

返回字符数组,后缀表达式就出来了。

⑺然后计算后缀表达。

⑻开始依次扫描数组,如果是数,就进栈,如果是运算符,那么就把栈的数弹出一个,赋值给一个变量,再弹一个赋值一个变量,再进行计算,完后再进栈。

⑼重复过程,直到度完。

栈顶元素就是最终结果。

⑽结束。

2.中缀直接计算:
⑴如果获取的操作符a的优先级高于操作符栈栈顶元素b的优先级,则a 直接入操作符栈;
⑵如果获取的操作符a的优先级低于操作符栈栈顶元素b的优先级,则b 出栈,a进栈,并且取出操作数栈的栈顶元素m,再取出操作数栈新的栈顶元素n,如果b为+,则用n+m,若为减号,则n-m,依此类推,并将所得结果入操作数栈;
⑶如果获取的是“(”,则直接进操作符栈;
⑸如果获取的是“)”,则操作符栈的栈顶元素出栈,做类似于情况2的计算,之后把计算结果入操作数栈,再取操作符栈顶元素,如果不是“(”,则出栈,重复操作,直到操作符栈顶元素为“(”,然后“(”出栈;
⑹当表达式中的所有元素都入栈后,看操作符栈中是否还有元素,如果有,则做类似于情况2 的计算,并将结果存入操作数栈,则操作数栈中最终的栈顶元素就是所要求的结果。

二、算法流程图
1.后缀
2.中缀直接计算
三、源代码
1.后缀表达式
#include<>
#include <>
#include<>
#include <string>
#include <stack>
#include<algorithm>
#include ""
#define MAXN 1000
using namespace std;
stack<char> S1; 缀直接计算#include<iostream>
#include<string>
#include<stack>
using namespace std;
int transform(char s[],char stored[])缀输入
结果
2.中缀直接计算
输入
结果
五、遇到的问题及解决
经过一个星期的写代码,我遇到了很多问题,并一一解决了,比如一些莫名其名的错误,都是思路没问题,但是呢,都是逻辑错误。

还有就是老师提问
的,分隔符问题。

不过可以解决,但是呢,要大量的改代码,我怕时间不够了,就不改了,因为还要去弄下一个报告了。

算法不一定是程序,但程序一定是算法!
六、心得体会
在做完本项目之后,体会最深的就是应该细心,并且很多时候我们看见某些事情很简单就不想去做,而做的时候又总会遗漏很多需要考虑的细节,或者根本就不知道从哪入手更好,在做这个项目时,错过很多次,很多时候有一种成功离自己很近很近,似乎可以看到,但就是无法接触到的感觉,我想,在以后的学习中,应该把一些必要的程序都敲一遍,而不要直接说句,简单,然后不屑去做,这样,其实最终很难真正学到什么!。

相关文档
最新文档