逆波兰表达式的java实现
来源:互联网 发布:数据库if else 编辑:程序博客网 时间:2024/05/15 08:16
import java.util.ArrayList;
import java.util.List;
public class MyStack {
private List<String> l;
private int size;
public String top;
public MyStack() {
l = new ArrayList<String>();
size = 0;
top = null;
}
public int size() {
return size;
}
public void push(String s) {
l.add(s);
top = s;
size++;
}
public String pop() {
String s = l.get(size - 1);
l.remove(size - 1);
size--;
top = size == 0 ? null : l.get(size - 1);
return s;
}
}
第二个类:
package com.yinlu.test1;
import java.util.ArrayList;
import java.util.List;
public class solution {
private static MyStack ms1 = new MyStack();//生成逆波兰表达式的栈
private static MyStack ms2 = new MyStack();//运算栈
/**
* 将字符串转换为中序表达式
*/
public static List<String> zb(String s) {
List<String> ls = new ArrayList<String>();//存储中序表达式
int i = 0;
String str;
char c;
do {
if ((c = s.charAt(i)) < 48 || (c = s.charAt(i)) > 57) {
ls.add("" + c);
i++;
} else {
str = "";
while (i < s.length() && (c = s.charAt(i)) >= 48
&& (c = s.charAt(i)) <= 57) {
str += c;
i++;
}
ls.add(str);
}
} while (i < s.length());
return ls;
}
/**
* 将中序表达式转换为逆波兰表达式
*/
public static List<String> parse(List<String> ls) {
List<String> lss = new ArrayList<String>();
for (String ss : ls) {
if (ss.matches("\\d+")) {
lss.add(ss);
} else if (ss.equals("(")) {
ms1.push(ss);
} else if (ss.equals(")")) {
while (!ms1.top.equals("(")) {
lss.add(ms1.pop());
}
ms1.pop();
} else {
while (ms1.size() != 0 && getValue(ms1.top) >= getValue(ss)) {
lss.add(ms1.pop());
}
ms1.push(ss);
}
}
while (ms1.size() != 0) {
lss.add(ms1.pop());
}
return lss;
}
/**
* 对逆波兰表达式进行求值
*/
public static int jisuan(List<String> ls) {
for (String s : ls) {
if (s.matches("\\d+")) {
ms2.push(s);
} else {
int b = Integer.parseInt(ms2.pop());
int a = Integer.parseInt(ms2.pop());
if (s.equals("+")) {
a = a + b;
} else if (s.equals("-")) {
a = a - b;
} else if (s.equals("*")) {
a = a * b;
} else if (s.equals("\\")) {
a = a / b;
}
ms2.push("" + a);
}
}
return Integer.parseInt(ms2.pop());
}
/**
* 获取运算符优先级
* +,-为1 *,/为2 ()为0
*/
public static int getValue(String s) {
if (s.equals("+")) {
return 1;
} else if (s.equals("-")) {
return 1;
} else if (s.equals("*")) {
return 2;
} else if (s.equals("\\")) {
return 2;
}
return 0;
}
public static void main(String[] args) {
System.out.println(jisuan(parse(zb("0-8+((1+2)*4)-3+(2*7-2+2)"))));
}
}
- 实现逆波兰表达式的java计算器
- 逆波兰表达式的java实现
- 逆波兰表达式java实现
- LeetCode 逆波兰表达式java实现
- 【Algorithm】逆波兰表达式 Java实现
- Java实现-逆波兰表达式求值
- 逆波兰表达式实现
- java 逆波兰表达式
- 逆波兰表达式 java
- 逆波兰表达式 java
- 逆波兰表达式 ---java
- 逆波兰表达式的c++实现
- 逆波兰表达式的生成(Java版)
- JAVA实现字符表达式的计算的实现(一)--逆波兰式的实现
- android逆波兰表达式的应用(三) 逆波兰表达式的实现 ----- 小达
- android逆波兰表达式的应用(四)逆波兰表达式的计算实现 -----小达
- 逆波兰表达式的实现(也叫后缀表达式)
- 实现逆波兰表达式(后缀表达式)的运算结果
- android studio集成极光推送,获取附加字段详细,并提供自己写的一个demo,绝对不是官方demo
- 任性杭州,骨感北京——面试汇总
- java从0单排之<<java就业培训教程>>复习与面试题回顾——01
- AI-路径导航(最短路径算法 and A算法)
- java 继承
- 逆波兰表达式的java实现
- 希望能在这里学习更多的东西
- 软件需求说明书
- 熵、基尼不纯度、KL、互信息
- Oracle 查询前10条记录及分页查询(第五条到第十条记录)
- MongoDb使用
- ListView性能优化——文艺式写法
- 基于信号量与P/V操作同步机制的读者/写者问题的设计与实现 (写者优先)
- iOS管理状态栏