前缀表达式怎样转化为后缀表达式
需要创建栈存放临时结果Stack需要创建队列存放最终结果 LinkedList遍历表达式:1 当数字时,插入队列中2 当遇到操作符" ","-","*","/"时: 如果栈此时为空,则无条件压入栈中。 否则,将从栈顶不断弹出元素,直到栈顶的元素优先级不小于操作符的 优先级,例如操作符如果为" ",则栈顶元素如果为" ","-","*","/",则均要弹出,将弹出元素插入队列中。 最后将操作符压入栈中。 3 "("无条件压入栈4 ")" 将弹出栈中的元素,直到遇到"(",将弹出元素插入队列中。5 遍历完表达式后,将栈中剩余运算全部插入队列中。/** 将前缀表达式转换成...全部
需要创建栈存放临时结果Stack需要创建队列存放最终结果 LinkedList遍历表达式:1 当数字时,插入队列中2 当遇到操作符" ","-","*","/"时: 如果栈此时为空,则无条件压入栈中。
否则,将从栈顶不断弹出元素,直到栈顶的元素优先级不小于操作符的 优先级,例如操作符如果为" ",则栈顶元素如果为" ","-","*","/",则均要弹出,将弹出元素插入队列中。 最后将操作符压入栈中。
3 "("无条件压入栈4 ")" 将弹出栈中的元素,直到遇到"(",将弹出元素插入队列中。5 遍历完表达式后,将栈中剩余运算全部插入队列中。/** 将前缀表达式转换成后缀表达式*/public static LinkedList Conversion(String str){StringBuffer sb=new StringBuffer();//保存结果LinkedList result=new LinkedList();//保存中间过程的结果Stack stacks=new Stack();for(int i=0;i='0'&&chsb。
append(ch);}else if(ch==' '||ch=='-'||ch=='*'||ch=='/'){result。add(sb。toString());sb=new StringBuffer();//当栈为空时,直接入栈if(stacks。
empty()){stacks。add(ch "");}else{while(!stacks。empty()){String head=stacks。peek();if(ch==' '||ch=='-'){if(" "。
equals(head)||"-"。equals(head)||"*"。equals(head)||"/"。equals(head)){result。add(stacks。pop()); }else{stacks。
push(ch "");break;}}else if(ch=='*'||ch=='/'){ if("*"。equals(head)||"/"。equals(head)){ result。
add(stacks。pop()); }else{ stacks。push(ch ""); break; }}}} }else if(ch=='('){result。add(sb。
toString());sb=new StringBuffer();//当遇到"("时,直接入栈stacks。add(ch "");}else if(ch==')'){result。add(sb。
toString());sb=new StringBuffer();//当栈为空时,直接入栈if(stacks。empty()){stacks。add(ch "");}else{while(!stacks。
empty()){String head=stacks。peek();if(!"("。equals(head)){result。add(stacks。pop());}else{stacks。pop();break;}}}} ///当遍历到字符串的末尾,将剩余的数字字符串添加到结果集中if(i==str。
length()-1){result。add(sb。toString());}}//将栈中剩余的元素全部弹出while(!stacks。empty()){result。add(stacks。pop());} return result;}。
收起