ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:133.54KB ,
资源ID:14959879      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14959879.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用两种方法实现表达式求值Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用两种方法实现表达式求值Word文档下载推荐.docx

1、4.如果获取的是“)”,则操作符栈的栈顶元素出栈,并依次存入到操作符栈中,直到操作符栈栈顶元素为“(”,然后将“(”出栈;5.当表达式中的所有元素都入栈或存入到操作符栈之后,看操作符栈中是否还有元素,如果有,则依次出栈,并且依次存入到操作符栈中,最后打印操作符栈中的字符串,则此字符串即为要求的后缀表达式。对后缀表达式的计算方法:主要用到了一个操作数栈,从操作符栈中依次取出元素,如果是操作数,则进栈,如果是操作符,则从操作数栈中依次取出两个栈顶元素a1和a2,如果操作符是“/”,则计算a2/a1,将计算结果再次进栈,依此类推,最终栈顶元素即为计算的最终结果。在这两种算法中,应该特别注意一点:人的

2、习惯,用户在输入表达式时,容易这样输入,如:3*4(3+2),这样是不可取的,应必须要用户输入3*4*(3+2),这是在设计思想上错误提示的很重要一点,否则计算不全面!二、算法流程图第一个图是直接计算的流程图,图中反应除了这种方法的大致设计思路,但是有些细节没有反映出来,比如说,怎样把字符型数据转换为浮点型数据,就没有反映出来。特别说明的是棱形左边代表Y,右边代表N,具体流程图如下:图1 直接计算算法流程图第二个图是对后缀表达式的求值的算法流程图,同样,棱形左边代表Y,右边代表N,怎样把字符型数据转换为浮点型数据,也同样没有反映出来。具体图如下:图2 后缀表达式计算的流程图三、源代码程序全部由

3、java语言编写,用面向对象的思路解决,通过eclipe测试。(一)用中缀式实现四则运算利用栈,进行四则运算的类 用两个栈来实现算符优先,一个栈用来保存需要计算的数据numStack,一个用来保存计算优先符priStack。基本算法实现思路为:用当前取得的运算符与priStack栈顶运算符比较优先级:若高于,则因为会先运算,放入栈顶;若等于,因为出现在后面,所以会后计算,所以栈顶元素出栈,取出操作数运算;若小于,则同理,取出栈顶元素运算,将结果入操作数栈。各个优先级( * = /+-) 。package .xiaoliu.zhongzhuishi;import java.util.Stack;

4、/这个算法的表达式要以#结束 如:21+5*1#public class Operate private Stack priStack = new Stack numStack = new Stack;/ 操作数栈/* 传入需要解析的字符串,返回计算结果(此处因为时间问题,省略合法性验证)* param str 需要进行技术的表达式* return 计算结果*/public int caculate(String str) / 1.判断string当中有没有非法字符String temp;/ 用来临时存放读取的字符/ 2.循环开始解析字符串,当字符串解析完,且符号栈为空时,则计算完成Strin

5、gBuffer tempNum = new StringBuffer();/ 用来临时存放数字字符串(当为多位数时)StringBuffer string = new StringBuffer().append(str);/ 用来保存,提高效率while (string.length() != 0) temp = string.substring(0, 1);string.delete(0, 1);/ 判断temp,当temp为操作符时if (!isNum(temp) / 1.此时的tempNum内即为需要操作的数,取出数,压栈,并且清空tempNum.equals(tempNum.toStr

6、ing() / 当表达式的第一个符号为括号int num = Integer.parseInt(tempNum.toString();numStack.push(num);tempNum.delete(0, tempNum.length();/ 用当前取得的运算符与栈顶运算符比较优先级:/ 若小于,则同理,取出栈顶元素运算,将结果入操作数栈。/ 判断当前运算符与栈顶元素优先级,取出元素,进行计算(因为优先级可能小于栈顶元素,还小于第二个元素等等,需要用循环判断)while (!compare(temp.charAt(0) & (!priStack.empty() int a = (int) n

7、umStack.pop();/ 第二个运算数int b = (int) numStack.pop();/ 第一个运算数char ope = priStack.pop();int result = 0;/ 运算结果switch (ope) / 如果是加号或者减号,则case :result = b + a;/ 将操作结果放入操作数栈numStack.push(result);break;result = b - a;result = b * a;result = b / a;/ 判断当前运算符与栈顶元素优先级, 如果高,或者低于平,计算完后,将当前操作符号,放入操作符栈if (temp.char

8、At(0) != #) priStack.push(new Character(temp.charAt(0);if (temp.charAt(0) = ) / 当栈顶为,而当前元素为时,则是括号内以算完,去掉括号priStack.pop(); else/ 当为非操作符时(数字)tempNum = tempNum.append(temp);/ 将读到的这一位数接到以读出的数后(当不是个位数的时候)return numStack.pop();* 判断传入的字符是不是0-9的数字* param str 传入的字符串* returnprivate boolean isNum(String temp)

9、return temp.matches(0-9);* 比较当前操作符与栈顶元素操作符优先级,如果比栈顶元素优先级高,则返回true,否则返回false* param str 需要进行比较的字符* return 比较结果 true代表比栈顶元素优先级高,false代表比栈顶元素优先级低private boolean compare(char str) if (priStack.empty() / 当为空时,显然 当前优先级最低,返回高return true;char last = (char) priStack.lastElement();/ 如果栈顶为显然,优先级最低,不可能为栈顶。if (last = switch (str) return false;/ 结束符/ 优先级最高,显然返回true优先级最低,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1