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
- 3-06. 表达式转换(25)
- 3-06. 表达式转换(25)
- 3-06. 表达式转换(25)(中缀表达式转后缀表达式ZJU_PAT)
- 3-06. 表达式转换
- 浙大PAT 3-06. 表达式转换 (解题思路)
- PAT3-06. 表达式转换
- 7-4 表达式转换(25 分)
- 实验项目3-6:表达式转换(中缀表达式转后缀表达式)
- 表达式求值(中缀表达式转换为后缀表达式)
- 表达式转换(25 分)(栈的应用)
- pta 5-8 表达式转换 (25分) (栈)
- 表达式转换
- 表达式转换
- 中缀表达式 转换成 前缀表达式(二叉树实现)
- lambda表达式的解析(三) 类型转换表达式
- 中缀表达式转换为后缀表达式(栈的使用)
- 中缀表达式转换为后缀表达式(栈的使用)
- 中缀表达式转换为后缀表达式(栈的使用)
- Word Loadder II (***) -- BFS DFS
- QT---设置textedit文本框中某个字符格式
- QT---qtextedit中的光标问题
- python 之 推导式
- 慕课学习C++笔记02-封装(上)
- 3-06. 表达式转换(25)
- 几道python笔试题
- leetcode 258 Add Digits(难易度:Easy)
- Java IO流->处理流->打印流:PrintStream&PrintWriter
- Python yield 使用浅析
- Java多线程 -- 有返回值的线程
- Android Camera
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- Redis源码分析---字典dict