使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式

完整代码

import java.io.IOException;public class InToPost {private Stack theStack;private String input;private String output = "";public InToPost(String in) {input = in;int stackSize = input.length();theStack = new Stack(stackSize);}public String doTrans() {for (int j = 0; j < input.length(); j++) {char ch = input.charAt(j);switch (ch) {case '+': case '-':gotOper(ch, 1); break; case '*': case '/':gotOper(ch, 2); break; case '(': theStack.push(ch);break;case ')': gotParen(ch); break;default: output = output + ch; break;}}while (!theStack.isEmpty()) {output = output + theStack.pop();}System.out.println(output);return output; }public void gotOper(char opThis, int prec1) {while (!theStack.isEmpty()) {char opTop = theStack.pop();if (opTop == '(') {theStack.push(opTop);break;}else {int prec2;if (opTop == '+' || opTop == '-')prec2 = 1;elseprec2 = 2;if (prec2 < prec1) { theStack.push(opTop);break;}elseoutput = output + opTop;}}theStack.push(opThis);}public void gotParen(char ch){ while (!theStack.isEmpty()) {char chx = theStack.pop();if (chx == '(') break; elseoutput = output + chx; }}public static void main(String[] args) throws IOException {String input = "1+2*4/5-7+3/6";String output;InToPost theTrans = new InToPost(input);output = theTrans.doTrans(); System.out.println("Postfix is " + output + '\n');}class Stack {private int maxSize;private char[] stackArray;private int top;public Stack(int max) {maxSize = max;stackArray = new char[maxSize];top = -1;}public void push(char j) {stackArray[++top] = j;}public char pop() {return stackArray[top--];}public char peek() {return stackArray[top];}public boolean isEmpty() {return (top == -1);}}
}

结果输出

124*5/+7-36/+
Postfix is 124*5/+7-36/+

Java 将中缀表达式转换成后缀表达式相关推荐

  1. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  2. 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)

    一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...

  3. 表达式转换成后缀表达式进行计算

    这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...

  4. 中缀表达式转换成后缀表达式

    中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...

  5. 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】

    核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...

  6. java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...

  7. java 中缀算术表达式转换成后缀表达式_求Java堆栈,将中缀算术表达式转换成后缀表达式。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...

  8. 中缀表达式转换成后缀表达式(只适用于加减乘除运算)

    1 #include <iostream> 2 #include <stack> 3 #include <cctype> 4 5 using namespace s ...

  9. (中缀)表达式转换成前缀表达式、后缀表达式

    认识前缀.中缀.后缀表达式: 一般我们平时用的计算式都是中缀表达式,因为符号都是在操作数的中间的.相对应的符号在操作数后面的就叫后缀表达式(也称逆波兰式),符号在操作数前面的就叫前缀表达式(也称波兰式 ...

最新文章

  1. 从单词统计问题看面试
  2. jwt获取token_SpringBoot2 高级案例(09): 整合 JWT 框架,解决Token跨域验证问题
  3. oracle form执行后左上角没出现oracle标记,oracle form学习笔记
  4. 什么舱位_海运出口中FOB条款是什么意思?
  5. luogu P2344 奶牛抗议 DP 树状数组 离散化
  6. QT5入门学习(一)
  7. PPM 金字塔池化模块 - PSPNet
  8. 一哥答疑,如何面对繁杂的数据需求?
  9. Android神兵利器之黄油刀的使用(ButterKnife)
  10. 第二人生的源码分析(102)脚本的构造
  11. 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
  12. 从被遗忘到牛市龙头,一文梳理ETH 2020爆发逻辑
  13. ls-dyna基础教程
  14. Minio 分布式集群部署
  15. 如何让table边框变为单实线?
  16. 【JZOJ A组】登山
  17. Linux终端下载资源的办法
  18. 成都旅游攻略 —— 拜水都江堰 问道青城山
  19. Revit Architecture基础概述学习记录
  20. 区块链资讯 2018.7.6 周五

热门文章

  1. c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt
  2. 计算机专业论文要交源代码吗,计算机毕业论文源代码.doc
  3. php 生成dbf,php 读取vfp 8.0,9.0所产生的dbf文件
  4. win7系统0xt000000f错误代码的解决方法
  5. VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
  6. php 位运算与权限,PHP中的二进制位运算和权限存储
  7. Linux - 查看软件安装与安装路径
  8. 鸿蒙构架谁提供的,科普丨关于“鸿蒙”,不知道这些你都不好意思跟别人打招呼!...
  9. 战地2服务器怎么虚拟人数,战地2怎么修改作战人数?
  10. c语言的表达式2 4 6 8的值,C语言程序设计测试题二