A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. public static ArrayList<String> toBehind(ArrayList<String> al)
  2.         {
  3.                 ArrayList<String> ak = new ArrayList<String>();
  4.                 Stack<String> s=new Stack<String>();
  5.                 for(int i=0;i<al.size();i++)
  6.                 {
  7.                         if(Character.isDigit(al.get(i).charAt(0)))//某位元素的第一个字符是否为数字
  8.                                 ak.add(al.get(i));
  9.                         else
  10.                         {   
  11.                                 while(!s.isEmpty()&&compared(s.peek(),al.get(i)))//栈内部没有泛型的话都是存储的object对象。
  12.                                 {
  13.                                         ak.add(s.pop());
  14.                                 }
  15.                                 s.push(al.get(i));
  16.                         }
  17.                 }
  18.                 System.out.println("转换成后缀表达式为:");
  19.                 for(String ss:ak)
  20.                 {
  21.                         System.out.print(ss+" ");
  22.                 }
  23.                 System.out.println();
  24.                 return ak;//返回的后缀表达式没有"#"了
  25.         }
复制代码

比如“3+4/5”这样一个字符串,我现在要将这个字符串的每一个字符都变得有意义,然后我可以计算这个算术?如何将这个表达式转换成后缀表达式呢?
由中缀表达式转化为后缀表达的具体步骤:
① 在表达式字符串的末尾加一个代表结束的辅助符,比如”#”。
② 从头开始扫描表达式,并判断当前的每一个字符。
③ 取当前的一个字符,如果当前字符是代表数字,则存入集合中,如果是运算符,则转入④,如果是“#“,则结束。
④ 比较当前运算符与临时栈中的栈顶运算符,如果栈顶运算符比当前运算符优先级高,则弹出一个运算符放进集合中,并继续④
否则把当前运算符进栈,转入②.

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

1 个回复

倒序浏览
不错,顶一个,栈合理应用的地方。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马