废话不多说,直接上代码, 栈是最简单的数据及结构, 可以使用数组实现也可以用链表实现. 并且有对泛型的支持.接口点击(此处)折叠或打开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的栈和用栈来解析算术表达式相关推荐

  1. 字符串算术表达式求值-简单计算器实现(栈)-数据结构和算法(Java)

    1 字符串算术表达式分类 字符串算术表达式分为前缀表达式.中缀表达式和后缀表达式.其中前缀表达式又称波兰表达式,后缀表达式基于前缀表达式,又称逆波兰表达式.下面给出百度百科关于几种表达式的定义: 前缀 ...

  2. 栈 -- 顺序栈、链式栈的实现 及其应用(函数栈,表达式求值,括号匹配)

    文章目录 实现 顺序栈实现 链式栈实现 应用 函数栈 的应用 表达式求值中 的应用 括号匹配中 的应用 我们使用浏览器的时候经常会用到前进.后退功能. 依次访问完一串页面 a – b – c之后点击后 ...

  3. 堆和栈区别 java_Java中的堆和栈以及堆栈的区别

    在正式内容开始之前要说明一点,我们经常所说的堆栈堆栈是堆和栈统称,堆是堆,栈是栈,合在一起统称堆栈; 堆主要用来存放对象,栈用来执行程序.dnf自动收货工具的原理就是一个程序比如自动收货,先设置收的东 ...

  4. 栈的应用(递归:例子裴波那契数列 四则运算表达式求值 :后缀(逆波兰) )

    递归: -栈有一个很重要的应用:在程序设计语言中实现递归. 当你往镜子前面一站,镜子里面就有-一个你的像. 但你试过两面镜子一起照吗?如果A.B两面镜子相互面对面放着,你往中间- -站,嘿,两面镜子里 ...

  5. 栈和队列-第3章-《数据结构习题集》答案解析-严蔚敏吴伟民版

    习题集解析部分 第3章  栈和队列                                                                                   ...

  6. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  7. 你只知道JVM栈,知不知道栈帧、局部变量表、slot、操作数栈?

    目录 虚拟机栈基础 虚拟机栈出现的背景 栈是运行时的单位,而堆是存储的单位 Java虚拟机栈 栈中可能出现的异常 设置Java栈大小 栈中存储什么? 栈运行原理 栈帧的内部结构 每个栈帧中存储着 局部 ...

  8. ssh备考-06Struts2 往值栈中存入值,以及前端获取值栈中的值

    目录 注意点: 一.先搭建好struts2框架 index.jsp struts.xml User.java 二.往值栈压值,前端如何获取值 1.获取值栈 ValueStack1Action.java ...

  9. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

最新文章

  1. 回归模型(regression model)有哪些指标?如何计算回归指标(regression metrics)?如何可视化他们?
  2. 电力电子技术第五版王兆安pdf_电力电子技术笔记(考试必备)
  3. 将一张表的数据插入另外一张表
  4. 【Hexo】搭建自己的博客并到Github Pages
  5. 大学计算机专业全英文论文,计算机专业大学生英文简历模板
  6. 11月18日站立会议
  7. Python学习笔记,爬取笔趣阁小说
  8. 最简单的git merge 和git rebase 介绍和示例演示
  9. css元素穿透。 pointer-events: none;
  10. Swoole(PHP高级Web开发框架)
  11. 【回归预测】基于matlab布谷鸟算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1555期】
  12. java远程获取linux文件_Java远程连接操作linux服务器,scp获取文件
  13. ami编码设计流程图_AMI码型变换
  14. mysql数据库安装(详细)
  15. 【深度学习】(1) CNN中的注意力机制(SE、ECA、CBAM),附Pytorch完整代码
  16. red5源码分析---1
  17. 《操作系统》-调度算法
  18. STM32驱动HC05蓝牙串口通信模块
  19. 解决UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initia
  20. 想在 Ubuntu 上放飞梦想的小黑菜(2)

热门文章

  1. Navicat Premium 15连接虚拟机上mysql并创建数据库
  2. 【OJ1768】最大子矩阵
  3. 19.内在摄像机校准——介绍,理想与真实固有参数之比,改善内在参数_1
  4. php语言指针的初始化定义,指针变量的初始化,C语言指针变量初始化详解
  5. bzoj3203 [Sdoi2013]保护出题人 凸包+二分
  6. vc6配置c语言编译环境,驱动WDK7600在VC6.0下的编译开发配置环境
  7. 用GDB调试Segmentation Fault错误
  8. android软件百分比怎么实现,android 百分比布局
  9. 禁用计算机外部设备,在桌面办公系统中, ()能够阻止外部主机对本地计算机的端口扫描。...
  10. java中类似webapi,在.net框架应用程序中包含.net核心WebAPI?