> 文档中心 > 数据结构项目三

数据结构项目三

项目三

  • 一、需求分析
  • 二、逻辑设计
  • 三、物理设计
  • 四、实验准备
    • 1.编程语言
    • 2.开发工具/平台

一、需求分析

【问题描述】
设计一个简单的算术表达式计算器。
【基本要求】
实现标准整数类型的四则运算表达式的求值(包含括号,可多层嵌入)。


二、逻辑设计

程序主要执行框架如下

其他类{操作数栈{}操作字符栈{}操作字符集合{}获取优先级{()* /+ -}中缀转后缀{}处理负号{}()中间的数字{}}主类{Main函数{Menu菜单}}

三、物理设计

用栈实现中缀表达式转换成后缀表达式

// 中缀转后缀private static String infixToSuffix(String expression) throws Exception {Operators = new Stack<>();Operators.clear();StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < expression.length(); i++) {char ch = expression.charAt(i);if (ch == ' ')continue;if (C_OperatorSet.contains(ch)) {// 如果操作符栈为空if (Operators.empty()) {if (ch == ')') { // 只要不是 ) 就入栈throw new Exception("表达式错误");// System.out.println("括号不匹配");// return sBuilder.toString();}Operators.push(ch);} else if (ch == '(') {Operators.push(ch);} else if (ch == ')') { // 如果是 ) 括号char top;while ((top = (char) Operators.peek()) != '(') { // 如果当前操作符栈的第一个不是( if (Operators.empty()) {// System.out.println("括号不匹配");// return sBuilder.toString();throw new Exception("表达式错误");}// 把运算符加入sBuildersBuilder.append(top);Operators.pop();}Operators.pop();} else { // 如果是运算符char top = (char) Operators.peek();if (getOperatorPriority(ch) <= getOperatorPriority(top)) { // 如果优先级小于操作符栈中第一个while (!Operators.empty()&& getOperatorPriority(ch) <= getOperatorPriority(top = (char) Operators.peek())) {// 把运算符加入sBuildersBuilder.append(top);Operators.pop();}}Operators.push(ch);}} else { // 如果是数字 加入sBuilder(把[3]的括号去除)sBuilder.append("[" + ch);while (i + 1 < expression.length()&& (((ch = expression.charAt(i + 1)) == '.') || (ch >= '0' && ch <= '9'))) {sBuilder.append(ch);++i;}sBuilder.append(']');}}while (!Operators.empty()) {if ((char) Operators.peek() == '(') {throw new Exception("表达式错误");// System.out.println("括号不匹配");// return "";}sBuilder.append(Operators.peek());Operators.pop();}return sBuilder.toString();}

算法框架如上,实际开发可能会有所改动

四、实验准备

1.编程语言

java

2.开发工具/平台

IDEA