(学习java)顺序栈实现逆波兰表达式
来源:互联网 发布:旅行箱 知乎 编辑:程序博客网 时间:2024/06/06 19:54
import java.util.Arrays;import java.util.Scanner;//10-21逆波兰表达式计算器public class RPN {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 将输入的字符串转换成一个字符数组System.out.println("请输入逆波兰表达式: ");char[] s = sc.nextLine().toCharArray();ArrStack arr = rpn(s);arr.listStack();}//逆波兰表达式public static ArrStack rpn(char[] s) {ArrStack as = new ArrStack();double num = 0;// 定义空字符串存入字符String arr = "";double a = 0;double b = 0;double result = 0;for (int i = 0; i < s.length; i++) {// 如果是数字字符,将其依次存入字符串中,则在遇到空格后,将字符串转换成double类型推入栈中if (isNumber(s[i]) || s[i] == '.') {arr = arr + s[i];} else if (s[i] == ' ') {// 遇到空格,将数据取出转成double类型推入栈中if(arr == ""){continue;}else{num = Double.valueOf(arr);as.stackPush(num);// 字符串置空arr = "";}}else{//遇到运算符字符,弹出栈顶前两个数进行运算后再压入栈中switch(s[i]){case '+':a = as.stackPop();b = as.stackPop();result = b + a;as.stackPush(result);break;case '-':a = as.stackPop();b = as.stackPop();result = b - a;as.stackPush(result);break;case '*':a = as.stackPop();b = as.stackPop();result = b * a;as.stackPush(result);break;case '/':a = as.stackPop();b = as.stackPop();if(a == 0){System.out.println("除数不能为0!");break;}result = b / a;as.stackPush(result);break;}}}return as;}// 判断字符是否为数字public static boolean isNumber(char c) {if (c >= 48 && c <= 57) {return true;}return false;}// 创建顺序栈public static class ArrStack {// 定义数组保存元素private Object[] elementData;// 定义栈的当前长度private int size;// 定义栈的当前容量private int capacity;// 定义栈顶public int top;// 初始化,默认建立一个容量为50的数组public ArrStack() {elementData = new Object[50];capacity = 50;}// 初始化,自定义容量数组public ArrStack(int n) {elementData = new Object[n];capacity = n;}// 入栈public <T> void stackPush(T data) {// 如果容量满了,则新建一个数组扩充容量if (size >= capacity) {int newLength = (capacity * 3 / 2) + 1;elementData = Arrays.copyOf(elementData, newLength);capacity = newLength;}elementData[top] = data;top++;size++;}// 出栈public <T> T stackPop() {if (size == 0) {System.out.println("当前为空栈");return null;} else {T data = (T) this.elementData[top - 1];top--;size--;return data;}}// 遍历栈public void listStack() {if (size == 0) {System.out.println("空栈");} else if (size == 1) {System.out.println(elementData[top-1]);System.out.println("栈的长度" + size);} else {for (int i = 0; i < size; i++) {System.out.print(elementData[i] + " ");}System.out.println("栈的长度" + size);}}// 返回当前容量public void capacity() {System.out.println("当前最大容量" + capacity);}}}
阅读全文
0 0
- (学习java)顺序栈实现逆波兰表达式
- 数据结构----顺序栈实现逆波兰表达式(后缀表达式)求解
- 逆波兰表达式java实现
- java使用栈和逆波兰表达式实现四则运算
- 实现逆波兰表达式的java计算器
- 逆波兰表达式的java实现
- LeetCode 逆波兰表达式java实现
- 【Algorithm】逆波兰表达式 Java实现
- Java实现-逆波兰表达式求值
- 逆波兰表达式实现
- 利用顺序栈计算后缀表达式(逆波兰表达式)
- 逆波兰表达式学习
- java 逆波兰表达式
- 逆波兰表达式 java
- 逆波兰表达式 java
- 逆波兰表达式 ---java
- [栈的应用]动态顺序栈的实现、逆波兰表达式
- 逆波兰表达式通过栈实现
- HDU 1832:Luck and Love(二维线段树)
- 脚本 Tips
- 求最大公因数的经典算法:Euclid辗转相除法
- java鬼混笔记:springboot 6、springboot整合mybatis(支持多数源)
- linux shell 运行jar 脚本不退出
- (学习java)顺序栈实现逆波兰表达式
- 计算字符中相邻位置相同字符的个数
- hdu5119(dp)
- 水池数目
- 数据分析(二)
- angular+ionic开发的页面,当子页面需要从父组件带参进入又需要可以脱离父组件进入,怎么配置?
- centos 7 安装 python 3 虚拟环境
- openresty图片上传
- Java学习:trim()函数、split()函数