- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
表达式求值数据结构实验二--1307班谭淇蔚
中南大学《数据结构》课程实验实验报告题 目实验二栈的基本操作学生姓名谭淇蔚学生学号3901130721专业班级1307实验二栈的基本操作1.需求分析栈是限定仅在表尾进行插入或删除操作的线性表。对于我们来说,栈其实是很有用的结构。利用栈,可以实现括号匹配,表达式求值以及迷宫求解等问题。我们的任务是学会基本的栈操作,学会入栈,出栈,判断栈空,取出栈顶元素,对于表达式进行求值,我们需要栈结构对其进行实现。输入形式:按照提示(比如:“请输入您所要输入的表达式:”、“请问您还要做表达式求值不?是的话请输入1,不是请输入0”)输入表达式进行计算即可。输入值的范围:输入的数值不要太大,可以支持超过5位的整数(至于可以支持多少,还没有具体测试),可以支持有小数点的数字。输出的形式:“请输入您所要输入的表达式:”输入式子后便会计算式子,于是得到结果,接着会显示:“请问您还要做表达式求值不?是的话请输入1,不是请输入0”,是1接着会重复操作,是0就会结束。程序所能达到的功能:程序基本可以实现个位数的加减乘除,以及可以支持多位数,比如20000这种大数字的范围的数字,还有浮点数20.555这种的计算,可以说是不错的一个程序。测试数据:正确数据:输入:(200+300)/5+20-30输出:90输入(20.555+29.445)/5+100 输出:110错误数据:输入:(3.4%3+1)输出:4.42.概要设计这是创造一个链栈的结构。OPTRstack是操作符栈定义structOPTRstack{char c;structOPTRstack *link;};typedefstructOPTRstackoptr;//定义操作符栈OPND是操作数栈的定义structOPNDstack{float data;structOPNDstack *link1;};typedefstructOPNDstackopnd;//定义操作数栈3.详细设计链栈的构建与声明初始化,这是构建栈的必备操作。structOPTRstack{char c;structOPTRstack *link;};typedefstructOPTRstackoptr;//定义操作符栈structOPNDstack{float data;structOPNDstack *link1;};typedefstructOPNDstackopnd;//定义操作数栈创造栈,即让头指针指向空。表明栈的创建,不过还没有放入数值或者字符而已。void createstack(optr* top){top = NULL;}void createstack(opnd* top){top = NULL;}//建立空栈入栈操作的定义,这里值得说明的是,利用了的是重载函数,根据函数的形参来调用是哪个函数调用。void push(optr* top, chard)//字符栈入栈函数{optr *t;t = newoptr;t-c = d;t-link = top;top = t;}void push(opnd* top, floatx)//定义数字栈入栈函数{opnd *p;p = newopnd;p-data = x;p-link1 = top;top = p;}解释一下:这里面,利用了optr* top,这里是引用指针传递,相当于指针的别名,对指针所指定的值进行了改变。具体在后面调试分析会告知。判断是否为空的函数:bool empty(opnd* top){if (top == NULL){return 1;}return 0;}这是判断操作数栈是否为空int empty1(optr* top){if (top == NULL){return 1;}return 0;}这是判断操作符栈是否为空。弹出栈顶元素的函数:char pop(optr *top, char x){optr *p = top;if (empty1(top)){cout Underflow!!\n;exit(0);}x = p-c;top = p-link;//free(p);returnx;}//取栈顶元素;//判断栈是否为空float pop(opnd * top, float x){opnd *p = top;if (empty(top)){cout Underflow!!\n;exit(0);}x = p-data;top = p-link1;returnx;}上面均是弹出栈顶元素的函数定义,应用于两个不同的链栈。优先级定义所需要的字符优先级大小判断书本53页的表格的应用罢了#defineOPSETSIZE 7unsignedchar Prior[7][7] = { // 表3.1 算符间的优先关系, , , , , , ,
文档评论(0)