2022年运用数据结构实现 .pdf
《2022年运用数据结构实现 .pdf》由会员分享,可在线阅读,更多相关《2022年运用数据结构实现 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、先说说我实现的思想首先把复杂问题简单化,先考虑没有括号但是表达式是连续的情况运算符当中*和/具有相同优先级而且是最高优先级,而+和-有相同优先级并次于乘除把复杂的问题简单化,就像cpu 只有加法器,所有的运算都转换为加法运算,这里我也是这样想的首先让字符串入栈,情况如下:我用 表示一个元素例如:3+2*3 3+2*3 栈顶出栈(在不考虑字符串不合法的情况下第一个出栈的一定是操作数)后面紧跟的是运算符第一步:出栈得到数据 3 栈内 3+2*第二步:出栈得运算符 *栈内 3+2 第三步:判断到运算符是*第四步:出栈得到数据 2 栈内 3+第五步:计算 3*2=6 入栈 6 栈内 3+6 第六步:栈
2、内元素累加的结果:3+6=9 现在来考虑有括号的情况:例如:3+(2+4*3)我用两个栈,第一个栈用来存放括号,第二个用来存放数第一步:栈一 栈二#号用于标记第二步:栈一 栈而#3 第三步:栈一 栈二#3+第四步:栈一(栈二#3+#第五步:栈一(栈二#3+#2 第六步:栈一(栈二#3+#2+第七步:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -栈一(栈二#3+#2+4 第八步:栈一(栈二#3+#2+4*第九步:栈一(栈二#3+#2+4*3 第十步:由于发现括号匹配所以栈一出栈栈一 以“#”号为标记得到一个连续的没有括号的运算式2+4*3 计算得到结果 14 然后再压入
3、栈二栈二#3+12 第十一步:由于发现括号匹配所以栈一出栈栈一 空以“#”号为标记得到一个连续的没有括号的运算式3+12 计算得到结果 15 压入栈二第十二步:发现栈一为空计算完毕栈二弹出得到结果 15 代码如下:import java.util.*;public class Calculator public static boolean machesBrackets(String expression1,String expression2)if(expression1.equals()&expression2.equals()return true;else if(expression1
4、.equals()&expression2.equals()return true;else if(expression1.equals()&expression2.equals()return true;else return false;public static void main(String args)Scanner input=new Scanner(System.in);System.out.println(请输入预算表达式);String expression=input.next();expression=+expression+;/这样的目的是当用户输入的表达式最外是数字而
5、非括号时,为了每个数都能入栈,所以添加对括号在外面 SimpleCalculator scct=new SimpleCalculator();/用于处理连续的没有括号的数学表达式 Stack stack1=new Stack();/用于匹配括号 Stack stack2=new Stack();/用于存储和处理操作数名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -String bracket=;/存储括号的临时变量 String regex=()1;String temp=;stack2.push(#);/向栈 2 压入标志 for(int i=0;i expressi
6、on.length();i+)if(bracket=expression.charAt(i)+).matches(regex)/如果是括号 if(!stack1.isEmpty()String bkt=stack1.getTop().toString();/栈 1 弹出栈顶元素得到准备匹配的括号 if(Calculator.machesBrackets(bkt,bracket)/如果匹配成功 stack1.pop();/栈顶出栈 String str=;if(!stack2.isEmpty()/如果栈 2 不为空 String exp=;List tempExpression=new Arra
7、yList();while(!(str=stack2.pop().toString()/若不是结束标记 .equals(#)tempExpression.add(str);for(int j=tempExpression.size()-1;j=0;j-)exp+=tempExpression.get(j);tempExpression=null;System.out.println(exp);/调试语句 Integer result=scct.calculate(exp);/计算出结果 System.out.println(result:+result);/调试语句 System.out.pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年运用数据结构实现 2022 运用 数据结构 实现
限制150内