package expression;
public class Expression {
public static StringBuffer toPostfix(String infix){
Stack<String> stack=new SeqStack<String>(infix.length()); //运算符栈,顺序栈
StringBuffer postfix=new StringBuffer(infix.length()*2); //后缀表达式字符串
int i=0;
while(i<infix.length()){
char ch=infix.charAt(i);
switch(ch){
case '+': case'-': //遇到+-运算符
while(!stack.isEmpty()&&!stack.peek().equals("(")){ //与栈顶运算符比较
postfix.append(stack.pop()); //出栈运算符添加到后缀表达式
}
stack.push(ch+""); //当前运算符入栈
i++;
break;
case '*': case'/': //遇到*/运算符
while(!stack.isEmpty()&&(stack.peek().equals("*")||stack.peek().equals("/"))){
postfix.append(stack.pop()); //栈顶运算符优先级高的出栈
}
stack.push(ch+""); //当前运算符入栈
i++;
break;
case '(': //遇到左括号
stack.push(ch+""); //入栈
i++;
break;
case ')':
String out=stack.pop();
while(out!=null && !out.equals("(")){ //直到遇到出栈符为左括号
postfix.append(out);
out=stack.pop();
}
i++;
break;
default: //遇到数字添加到后缀表达式之后
while(i<infix.length()&&ch>='0'&&ch<'9'){
postfix.append(ch);
i++;
if(i<infix.length()){
ch=infix.charAt(i);
}
}
postfix.append(" "); //添加空格作为数值之间的分隔符
}
}
while(!stack.isEmpty()){
postfix.append(stack.pop());
}
return postfix;
}
public static int toValue(StringBuffer postfix){ //计算后缀表达式的值
Stack<Integer> stack=new LinkedStack<Integer>(); //操作数栈,链式栈
int value=0;
for(int i=0;i<postfix.length();i++){ //遍历后缀表达式中的字符
char ch=postfix.charAt(i);
if(ch>='0' && ch<='9'){ //遇到数字字符
value=0;
while(ch!=' '){ //将整数字符串转换为整数值
value=value*10+ch-'0';
ch=postfix.charAt(++i);
}
stack.push(value); //整数对象入栈
}
else{
if(ch!=' '){
int y=stack.pop(); //出栈两个操作符,注意出栈次序
int x=stack.pop();
switch(ch){
case'+': value=x+y; break;
case'-': value=x-y; break;
case'*': value=x*y; break;
case'/': value=x/y; break;
}
System.out.print(x+(ch+"")+y+"="+value+","); //显示运算过程
stack.push(value); //运算结果入栈
}
}
}
return stack.pop();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String infix="123+10*(45-50+20)/((35-25)*2+10)-11";
StringBuffer postfix=toPostfix(infix);
System.out.println("\ninfix="+infix+"\npostfix="+postfix+"\nvalue="+toValue(postfix));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构和算法(Java).zip
共25个文件
java:15个
class:7个
js:1个
需积分: 2 0 下载量 90 浏览量
2024-01-14
12:43:03
上传
评论
收藏 24KB ZIP 举报
温馨提示
算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
资源推荐
资源详情
资源评论
收起资源包目录
数据结构和算法(Java).zip (25个子文件)
open_suanfayushujujiegouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxcxvcvcv
sort
animation.js 3KB
sort.css 677B
index.html 2KB
expression
Expression.class 3KB
SeqStack.class 1KB
LinkedStack.java 608B
LinkedStack.class 1KB
Expression.java 3KB
SeqStatic.java 49B
SeqList.class 3KB
SeqStack.java 617B
Stack.java 258B
Stack.class 336B
SeqList.java 2KB
binaryTree
SinglyList.java 2KB
Node.java 292B
LinkedStack.java 562B
BinaryTree.java 2KB
BinaryNode.java 491B
SeqQueue.java 1KB
LinkedQueue.java 686B
josephus
SinglyList.java 2KB
SinglyList.class 3KB
Josephus.class 2KB
Josephus.java 1KB
共 25 条
- 1
资源评论
极致人生-010
- 粉丝: 4435
- 资源: 3089
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 一对一MybatisProgram.zip
- 时变动态分位数CoVaR、delta-CoVaR,分位数回归 △CoVaR测度 溢出效应 动态 Adrian2016基于分位数回归方法计算动态条件在险价值 R语言代码,代码更数据就能用,需要修改的
- 人物检测37-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 人物检测26-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 人和箱子检测2-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 清华大学2022年秋季学期 高等数值分析课程报告
- GEE错误集-Cannot add an object of type <Element> to the map. Might be fixable with an explicit .pdf
- 清华大学2022年秋季学期 高等数值分析课程报告
- 矩阵与线程的对应关系图
- 人体人员检测46-YOLO(v5至v9)、COCO、Darknet、TFRecord数据集合集.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功