3-06. 表达式转换(25)

来源:互联网 发布:有个腿长的女朋友知乎 编辑:程序博客网 时间:2024/05/01 04:25

题目:http://www.patest.cn/contests/ds/3-06

参考:http://www.nowamagic.net/librarys/veda/detail/2307

规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。

例:

import java.util.ArrayList;import java.util.LinkedList;import java.util.Scanner;/** * @author chenhong * *  * */public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);char[] str = scanner.next().toCharArray();LinkedList<Character> stack = new LinkedList<Character>();boolean space = false;boolean isFirst = true;for(int i=0;i<str.length;i++){if(space){space= false;System.out.print(" ");}//注意没有考虑到 1+(-2+2) 这样地负数情况if(isFirst && (str[i]=='-' || str[i]=='+')){if(str[i]!='+'){System.out.print(str[i]);}isFirst=false;continue;}isFirst=false;//如果是数字就输出if(  ('0'<=str[i] && str[i]<='9') || str[i]=='.' )System.out.print(str[i]);//如果是运算符,分情况处理else {if(str[i]==')'){char temp;while(  (temp=stack.pop())!='(' ){System.out.print(" "+temp);space = false;}}else if(str[i]=='('){stack.push(str[i]);isFirst=true;}//栈为空,就压入栈else if(stack.size()<=0){space = true;stack.push(str[i]);}//栈不为空,且不是(),根据栈顶元素来判断做何种操作else {space = true;//获取栈顶元素char temp = stack.peek();if(temp=='*' || temp=='/'){if(str[i]=='+' || str[i]=='-'){while(!stack.isEmpty() && stack.peek()!='('){System.out.print(" "+stack.pop());}stack.push(str[i]);}elsestack.push(str[i]);}else {stack.push(str[i]);}}}}while(!stack.isEmpty()){System.out.print(" "+stack.pop());}}}



0 0