- public static ArrayList<String> toBehind(ArrayList<String> al)
- {
- ArrayList<String> ak = new ArrayList<String>();
- Stack<String> s=new Stack<String>();
- for(int i=0;i<al.size();i++)
- {
- if(Character.isDigit(al.get(i).charAt(0)))//某位元素的第一个字符是否为数字
- ak.add(al.get(i));
- else
- {
- while(!s.isEmpty()&&compared(s.peek(),al.get(i)))//栈内部没有泛型的话都是存储的object对象。
- {
- ak.add(s.pop());
- }
- s.push(al.get(i));
- }
- }
- System.out.println("转换成后缀表达式为:");
- for(String ss:ak)
- {
- System.out.print(ss+" ");
- }
- System.out.println();
- return ak;//返回的后缀表达式没有"#"了
- }
复制代码
比如“3+4/5”这样一个字符串,我现在要将这个字符串的每一个字符都变得有意义,然后我可以计算这个算术?如何将这个表达式转换成后缀表达式呢?
由中缀表达式转化为后缀表达的具体步骤:
① 在表达式字符串的末尾加一个代表结束的辅助符,比如”#”。
② 从头开始扫描表达式,并判断当前的每一个字符。
③ 取当前的一个字符,如果当前字符是代表数字,则存入集合中,如果是运算符,则转入④,如果是“#“,则结束。
④ 比较当前运算符与临时栈中的栈顶运算符,如果栈顶运算符比当前运算符优先级高,则弹出一个运算符放进集合中,并继续④
否则把当前运算符进栈,转入②. |