Java 将中缀表达式转换成后缀表达式
使用堆栈进行表达式的堆栈将中缀(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 将中缀表达式转换成后缀表达式相关推荐
- c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)
逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...
- 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)
一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...
- 表达式转换成后缀表达式进行计算
这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...
- 中缀表达式转换成后缀表达式
中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...
- 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】
核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...
- java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...
- java 中缀算术表达式转换成后缀表达式_求Java堆栈,将中缀算术表达式转换成后缀表达式。...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...
- 中缀表达式转换成后缀表达式(只适用于加减乘除运算)
1 #include <iostream> 2 #include <stack> 3 #include <cctype> 4 5 using namespace s ...
- (中缀)表达式转换成前缀表达式、后缀表达式
认识前缀.中缀.后缀表达式: 一般我们平时用的计算式都是中缀表达式,因为符号都是在操作数的中间的.相对应的符号在操作数后面的就叫后缀表达式(也称逆波兰式),符号在操作数前面的就叫前缀表达式(也称波兰式 ...
最新文章
- 从单词统计问题看面试
- jwt获取token_SpringBoot2 高级案例(09): 整合 JWT 框架,解决Token跨域验证问题
- oracle form执行后左上角没出现oracle标记,oracle form学习笔记
- 什么舱位_海运出口中FOB条款是什么意思?
- luogu P2344 奶牛抗议 DP 树状数组 离散化
- QT5入门学习(一)
- PPM 金字塔池化模块 - PSPNet
- 一哥答疑,如何面对繁杂的数据需求?
- Android神兵利器之黄油刀的使用(ButterKnife)
- 第二人生的源码分析(102)脚本的构造
- 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
- 从被遗忘到牛市龙头,一文梳理ETH 2020爆发逻辑
- ls-dyna基础教程
- Minio 分布式集群部署
- 如何让table边框变为单实线?
- 【JZOJ A组】登山
- Linux终端下载资源的办法
- 成都旅游攻略 —— 拜水都江堰 问道青城山
- Revit Architecture基础概述学习记录
- 区块链资讯 2018.7.6 周五
热门文章
- c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt
- 计算机专业论文要交源代码吗,计算机毕业论文源代码.doc
- php 生成dbf,php 读取vfp 8.0,9.0所产生的dbf文件
- win7系统0xt000000f错误代码的解决方法
- VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
- php 位运算与权限,PHP中的二进制位运算和权限存储
- Linux - 查看软件安装与安装路径
- 鸿蒙构架谁提供的,科普丨关于“鸿蒙”,不知道这些你都不好意思跟别人打招呼!...
- 战地2服务器怎么虚拟人数,战地2怎么修改作战人数?
- c语言的表达式2 4 6 8的值,C语言程序设计测试题二