用栈实现算术表达式 java_java的栈和用栈来解析算术表达式
废话不多说,直接上代码, 栈是最简单的数据及结构, 可以使用数组实现也可以用链表实现. 并且有对泛型的支持.接口点击(此处)折叠或打开public interface StackE> { boolean isEmpty(); E peek(); E pop(); void push(E item); int size();}这是个用链表实现的stack.点击(此处)折叠或打开public class GenericLinkedStackE> implements StackE> { private class NodeT>{ private T data; private NodeT> next; private Node(T data,NodeT> next){ this.data=data; this.next=next; } } private NodeE> top; private int size; public void push(E item){ top=new Node(item, top); size++; } public E pop(){ E result=top.data; top=top.next; size--; return result; } public int size(){ return size; } public E peek(){ return top.data; } public boolean isEmpty(){ return size==0; } public static void main(String[] args) { // TODO Auto-generated method stub StackInteger> s = new GenericLinkedStack>(); System.out.println(s.isEmpty()); for(int i=0;i5;i++){ s.push(i); } for(int i=0;i10;i++){ s.push(i); } System.out.println(s.isEmpty()); System.out.println(s.peek()); System.out.println(s.size()); System.out.println(s.pop()); StackDouble> d= new GenericLinkedStack>(); System.out.println(d.isEmpty()); Random gen = new Random(); for(int i=0;i10;i++){ d.push(gen.nextGaussian()); } System.out.println(d.isEmpty()); System.out.println(d.peek()); System.out.println(d.size()); System.out.println(d.pop()); }}下面的是数组的.点击(此处)折叠或打开public class GenericArrayStackE> implements StackE>{ private int top=-1; private E[] data; private static final int DEFAULT_CAPACITY=10; public boolean isEmpty(){ return top==-1; } public int size(){ return data.length; } //constructor public GenericArrayStack(){ data=(E[])new Object[DEFAULT_CAPACITY]; } public E peek(){ return data[top]; } public void push(E elem){ if(top==data.length-1) resize(2*data.length); data[++top]=elem; } public E pop(){ if(isEmpty()) throw new EmptyStackException(); return data[top--]; } public void resize(int newCapacity){ E[] newdata = (E[])new Object[newCapacity]; for(int i=0;i=top;i++){ newdata[i]=data[i]; } data=newdata; } public static void main(String[] args) { // TODO Auto-generated method stub StackInteger> s = new GenericArrayStack>(); System.out.println(s.isEmpty()); for(int i=0;i10;i++){ s.push(i); } System.out.println(s.isEmpty()); System.out.println(s.peek()); System.out.println(s.size()); System.out.println(s.pop()); }}下面是解析算术表达式点击(此处)折叠或打开package tree;public class Expression { private static int rank(String op){ switch(op){ case "*": case "/": return 2; case "+": case "-": return 1; default : return -1; } } private static final String SPACE=" "; public static String toPostfix(String expr){ StringBuilder result = new StringBuilder(); StackString> operators = new GenericArrayStack>(); for(String token: expr.split("\\s+")){ if(rank(token) > 0){ while(!operators.isEmpty() && rank(operators.peek()) >= rank(token)){ result.append(operators.pop()+SPACE); } operators.push(token); }else{ result.append(token+SPACE); } } while(!operators.isEmpty()){ result.append(operators.pop()+SPACE); } return result.toString(); } public static int compute(int i1, int i2, String op){ int result=0; switch(op){ case "*": result = i1 * i2; break; case "/": result = i1 / i2; break; case "+": result = i1 + i2; break; case "-": result = i1 - i2; break; } return result; } public static int evalPostfix(String exp){ //Stack results = new GenericArrayStack(); StackString> operands = new GenericArrayStack>(); int result =0; for(String token: exp.split("\\s+")){ if(rank(token)> 0){ int oper2=Integer.parseInt(operands.pop()); int oper1=Integer.parseInt(operands.pop()); result = compute(oper1, oper2, token); //System.out.println(result); operands.push(Integer.toString(result,10)); }else{ operands.push(token); } } return Integer.parseInt(operands.pop()); } public static void main(String[] args) { // TODO Auto-generated method stub int answer =0; String exp = "3 5 1 - *"; answer = evalPostfix("3 5 1 - *"); System.out.println(answer); String exp2= "5 - 1 + 3 * 2"; System.out.println(evalPostfix(toPostfix(exp2))); }}
10-12 11:23
用栈实现算术表达式 java_java的栈和用栈来解析算术表达式相关推荐
- 字符串算术表达式求值-简单计算器实现(栈)-数据结构和算法(Java)
1 字符串算术表达式分类 字符串算术表达式分为前缀表达式.中缀表达式和后缀表达式.其中前缀表达式又称波兰表达式,后缀表达式基于前缀表达式,又称逆波兰表达式.下面给出百度百科关于几种表达式的定义: 前缀 ...
- 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)
文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...
- 堆和栈区别 java_Java中的堆和栈以及堆栈的区别
在正式内容开始之前要说明一点,我们经常所说的堆栈堆栈是堆和栈统称,堆是堆,栈是栈,合在一起统称堆栈; 堆主要用来存放对象,栈用来执行程序.dnf自动收货工具的原理就是一个程序比如自动收货,先设置收的东 ...
- 栈的应用(递归:例子裴波那契数列 四则运算表达式求值 :后缀(逆波兰) )
递归: -栈有一个很重要的应用:在程序设计语言中实现递归. 当你往镜子前面一站,镜子里面就有-一个你的像. 但你试过两面镜子一起照吗?如果A.B两面镜子相互面对面放着,你往中间- -站,嘿,两面镜子里 ...
- 栈和队列-第3章-《数据结构习题集》答案解析-严蔚敏吴伟民版
习题集解析部分 第3章 栈和队列 ...
- 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...
- 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?
目录 虚拟机栈基础 虚拟机栈出现的背景 栈是运行时的单位,而堆是存储的单位 Java虚拟机栈 栈中可能出现的异常 设置Java栈大小 栈中存储什么? 栈运行原理 栈帧的内部结构 每个栈帧中存储着 局部 ...
- ssh备考-06Struts2 往值栈中存入值,以及前端获取值栈中的值
目录 注意点: 一.先搭建好struts2框架 index.jsp struts.xml User.java 二.往值栈压值,前端如何获取值 1.获取值栈 ValueStack1Action.java ...
- 给定入栈序列,判断一个串是否为出栈序列
剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...
最新文章
- 回归模型(regression model)有哪些指标?如何计算回归指标(regression metrics)?如何可视化他们?
- 电力电子技术第五版王兆安pdf_电力电子技术笔记(考试必备)
- 将一张表的数据插入另外一张表
- 【Hexo】搭建自己的博客并到Github Pages
- 大学计算机专业全英文论文,计算机专业大学生英文简历模板
- 11月18日站立会议
- Python学习笔记,爬取笔趣阁小说
- 最简单的git merge 和git rebase 介绍和示例演示
- css元素穿透。 pointer-events: none;
- Swoole(PHP高级Web开发框架)
- 【回归预测】基于matlab布谷鸟算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1555期】
- java远程获取linux文件_Java远程连接操作linux服务器,scp获取文件
- ami编码设计流程图_AMI码型变换
- mysql数据库安装(详细)
- 【深度学习】(1) CNN中的注意力机制(SE、ECA、CBAM),附Pytorch完整代码
- red5源码分析---1
- 《操作系统》-调度算法
- STM32驱动HC05蓝牙串口通信模块
- 解决UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initia
- 想在 Ubuntu 上放飞梦想的小黑菜(2)
热门文章
- Navicat Premium 15连接虚拟机上mysql并创建数据库
- 【OJ1768】最大子矩阵
- 19.内在摄像机校准——介绍,理想与真实固有参数之比,改善内在参数_1
- php语言指针的初始化定义,指针变量的初始化,C语言指针变量初始化详解
- bzoj3203 [Sdoi2013]保护出题人 凸包+二分
- vc6配置c语言编译环境,驱动WDK7600在VC6.0下的编译开发配置环境
- 用GDB调试Segmentation Fault错误
- android软件百分比怎么实现,android 百分比布局
- 禁用计算机外部设备,在桌面办公系统中, ()能够阻止外部主机对本地计算机的端口扫描。...
- java中类似webapi,在.net框架应用程序中包含.net核心WebAPI?