java中缀转后缀_详解JAVA语言中缀转后缀表达式代码

本文主要向大家介绍了JAVA语言中缀转后缀表达式代码,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

看了网上其他人写的感觉好复杂,难以理解,我感觉我的实现很简单,容易明白,可以借鉴!哈哈

注释很全,不解释了public class Demo {

@Test

public void main(){

String hou = zhongTransHou("2+((1-3)*4)-2");

System.out.println(hou);

}

public String zhongTransHou(String zhong){

//创建一个栈存放运算符使用

Stack ysfz = new Stack();

StringBuilder hz = new StringBuilder();

//扫描整个运算表达式

char[] chars = zhong.toCharArray();

for (char c : chars) {

//当前扫描的是运算符

if(c == '+' || c== '-' || c== '*' || c=='/'||c==')'||c=='('){

//进行优先级和右括号的判断

//如果当前元素是右括号的话

if(c == ')'){

while(ysfz.peek()!='('){//遍历部分栈,只要栈顶不是"("都要出战,并且匹配到"("本身也要出栈

char top = ysfz.pop();//移除栈顶元素并返回移除的值

hz.append(top);

}

//执行到这里说明已经清空了所有的在"("上面的运算符,此后将本身也给清楚

ysfz.pop();

}else if(ysfz.isEmpty()){//当前栈是空的话

ysfz.push(c);//直接入栈

}else if(curYSFIsGao(c,ysfz)){//当前运算符比栈顶运算符高的话

ysfz.add(c);

}else if(!curYSFIsGao(c,ysfz)){//当前运算符比栈顶运算符低的话

while(!ysfz.isEmpty()){//遍历整个栈

char top = ysfz.pop();

hz.append(top);

}

//执行到这里栈已经是空了,现在将当前元素入栈

ysfz.push(c);

}

}else{//当前扫描的数字

hz.append(c);

}

}

//真个表达式扫描之后,出栈

while(!ysfz.isEmpty()){

char top = ysfz.pop();

hz.append(top);

}

return hz.toString();

}

/**

* 判断当前元素和栈顶元素的优先级,这里面间接的判断如果是“(”也是入栈(优先级高就入栈)

* @param c

* @param ysfz

* @return

*/

private boolean curYSFIsGao(char c,Stack ysfz) {

boolean isGao = true;//默认是高

//拿取栈顶元素,和当前传入元素做比较优先级

char top = ysfz.peek();

if(c == '+' || c == '-'){

if(top == '*' || top == '/'){

isGao = false;

}

//遇到加减或者"("默认高

}

//当前是乘除的话默认高,也就是都向栈里面添加

return isGao;

}

}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页