表达式求值数据结构实训报告.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式求值数据结构实训报告

数据结构实训 总结报告题目:表达式求值学生姓名:学生学号: 专业班级: 指导老师: 目录1.课题分析1.1需求分析..............................................................1. 2设计要求2.总体设计2.1主程序的流程详细设计(步骤及代码实现)3. 1判断运算符优先级..............................................3. 2中缀表达式转后缀表达式..................................3. 3后缀表达式求值..................................................4.测试结果5.心得体会6.参考文献1.课题分析1.1需求分析(1)栈“后进先出”的特点。(2)中缀表达式转后缀表达式,并利用后缀表达式求值。1.2设计要求(1)运算对象存在多位整数。(2)实现表达式错误的报错。(3)判断运算符优先级。(4)中缀表达式转后缀表达式。2.总体设计2.1主程序的流程详细设计(步骤及代码实现)3.1判断运算符优先级(乘除优先于加减)int SqStack::cmp(char ch) {switch(ch) { case +: case -: return 1; case *: case /: return 2; default : return 0; } } 3.2中缀表达式转后缀表达式(1)首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;(2)定义一个运算符栈,并输入一个中缀表达式(运算对象存在多位整数,运算符为+、-、*、/、%及括号),然后从中缀表达式中自左至右依次读入各个字符。(3)在字符串s1读取到的运算对象直接输送到后缀表达式 字符串s2,两相邻操作数之间利用空格隔开。(4)如果读入的是运算符,并且运算符栈为空,则将该运算符直接进栈;如果栈不为空,则比较该运算符和栈顶运算符的优先级。 若该运算符高于栈顶运算符的优先级,则将该运算符直接进栈;若该运算符低于或等于栈顶运算符的优先级,则将栈中高于或等于该运算符优先级的元素依次出栈,然后再将该运算符进栈。出栈的运算符输入到s2中,利用空格隔开。(5)如果读入的是开括号“(”,则直接进栈;如果读入的是闭括号“)”,则一直出栈并输出到后缀表达式,知道遇到一个开括号“(”为止。开括号“(”和闭括号“)”均不输出到后缀表达式。(6)重复345步,直到中缀表达式结束,然后将栈中剩余的所有运算符依次出栈。void SqStack::change(string s1, string s2) { stack char s; s.push(#); int i = 0; while(i s1.length()) {if(s1[i] == () s.push(s1[i++]); else if(s1[i] == )) { while( s.top() != ( ){ s2 += s.top(); s2 += ; s.pop(); } s.pop(); i++; }else if( s1[i] == +||s1[i] == -||s1[i] == *||s1[i] == / ) {while( cmp(s.top()) = cmp(s1[i]) ){s2 += s.top(); s2 += ; s.pop();} s.push(s1[i]); i++;} else{ while(0 = s1[i]s1[i] = 9||s1[i] == .){ s2 += s1[i++]; } s2 += ; } } while(s.top() != #){ s2 += s.top(); s2 += ; s.pop(); } } 3.3后缀表达式求值(1)定义一个double型的运算数栈,将中缀表达式转换得到的后缀表达式字符串自左向右依次读入。(2)如果读入的是运算对象,则将该运算对象串(下一个逗号分隔符前的部分所构成的数字字符串)转换为对应的多位整数值,然后将该整数值(将自动类型转换为double型)直接进入运算数栈。(3)如果读入的是运算符,则立即从运算数栈中弹出两个运算数,计算两

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档