- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中缀求值
江西理工大学软件学院
计算机类课程实验报告
课程名称: 数据结构
班 级: 11软会(4)班
姓 名: 汪顺芳
学 号:
江西理工大学软件学院目 录
实验名称与目的……………………………3
实验基本要求………………………………3
实验仪器设备与材料………………………3
实验原理……………………………………3
软件测试……………………………………4
实验心得与思考题…………………………5
源代码………………………………………6
8.参考文献……………………………………10实验名称与目的
实验名称:中缀表达式求值
测试学生是否真正理解栈和队列的差别以及对栈的灵活运用。
通过编写代码来解决一些简单的算术问题。
通过编写代码来进一步提高学生的理解力与自我操作能力。
实验基本要求
正确解释表达式;
符合四则运算规则;
输出最后的计算结果。
实验仪器与设备
学校机房的计算机,个人电脑,windows XP,数据结构课本,VC++6.0
四,实验原理
栈是操作受限的线性表,其数据元素具有单一的前驱和后继的线性关系,还具有后进先出的特性;
表达式是由运算对象,运算符和圆括号组成的式子,中缀表达式是指双目运算符在两个运算对象的中间,运算符有+、-、*、/、#五种,#为定界符。优先级从高到低依次为()、*、/、+、-、#;
中缀表达式求值过程需要两个栈:运算对象栈和运算符栈。
五.软件测试
1. 12*(5+3)-7=?
2. 22+3-40=?
六.实验心得与思考题
心得:完成这次数据结构的课程设计的时间虽然不长,但是我还是学到了不少东西。
在做课程设计之前,我首先仔细钻研老师给的课题,然后在阅读课本。有些不懂的知识就和老师咨询与同学交流。这个课题最主要的是要明白栈的相关知识,尤其是栈“后进先出”特点,在比较完运算符优先级后,将比栈顶运算符高优先级放入栈中,待表达式全部被扫描完。在编写中缀表达式求值函数时,忘了处理数字字符,因为主函数里定义的是字符数组,所以在对表达式求值时要转换成对应的数字。此外,在编写程序的过程中,不能心急烦躁,遇到问题要耐心查找资料,然后解决 。有时候会因为一点小错误导致编译出现错误,而这些错误又很难发现。这是需要我们细心查找,运用所学知识,一点一点的分析问题,再去解决这些问题。因为成功的背后必定会有辛勤和汗水。这也让我体会到想要在软件编程方面发展并取得成功所需要付出的努力。
通过完成这次算数表达式求值的课程设计。我对数据结构这门课又有了更深刻的了解,也提升了自己的逻辑思维能力。以及程序编写能力,即使有时候晚上编程到很晚,但心里还是美滋滋的,因为看到自己亲自编写的程序可以执行,达到所必须的要求,之前的苦累全部抛在脑后了。
最后非常感谢老师的帮助,每次问的问题都很耐心的为我讲解,即使有一次因为出去有事儿没来上课从而落下的课,她依旧很细心的为我分析讲解。很是感谢。
思考题:(1)如果要求输出每一步的计算过程,应该如何修改算法?(2)如果运算符包含括号且括号可以嵌套,应该如何修改算法?
(3)如果操作数可以是多位整数,应如何修改算法?
七.源代码
#includeiostream
using namespace std;
#define STACK_INIT_SIZE 100 //定义常量
#define STACKINCREMENT 10
templatetypename Tclass SqStack
{
public:
T *base;
T *top;
T e;
int size;
// public:
void InitStack() //声明栈建立函数
{
base=(T *)malloc(STACK_INIT_SIZE *sizeof(T));
if(!base)cout存储分配失败!;
top=base;
size=STACK_INIT_SIZE;
}
void Push(T e) //入栈
{
if((top - base)=size) //栈满,追加存储空间
{
base=(T *)realloc(base,(size+STACKINCREMENT)*sizeof(T));
if(!base)cout存储分配失败!;
else
{
top=base+size;
size=size+STACKINCREMENT;
}
}
*top=e;
top = top+1; //将元素e入栈
原创力文档


文档评论(0)