栈在编程语言中用来对表达式求值。请使用StackDemo对下面表达式求值,其中,“+“表示将后面的字母压进栈,而”-”表示弹出栈顶字母并打印出来:
+U+n+c---+c+r+t---+a-+i-+n+t+y---+--r+u--+c+e+s---
已知StackDemo如下:
- import java.util.LinkedList;
- public class StackDemo<Object>
- {
- private LinkedList<Object> storage = new LinkedList<Object>();
- public void push(Object o){storage.addFirst(o);}
- public Object peek(){return storage.getFirst();}
- public Object pop(){return storage.removeFirst();}
- public boolean empty(){return storage.isEmpty();}
- public String toString(){return storage.toString();}
- }
。求表达式:
- import java.util.*;
- class ExpressionInStack
- {
- public static void main(String[] args)
- {
- char[] c;
- String s="+U+n+c---+c+r+t---+a-+i-+n+t+y---+--r+u--+c+e+s---+I+ +l+o+v+e+ +l+i+f+e";
- c=s.toCharArray();
- StackDemo<Character > sd=new StackDemo<Character >();
- for(int i=0; i<c.length; i++){
- if(c[i]=='+'){
- i++;
- if(!(c[i]=='+')&&!(c[i]=='-'))
- sd.push(c[i]);
- }
- if(c[i]=='-'){
- if(!sd.empty()){
- System.out.print(sd.pop());
- }
- }
- }
- System.out.println(sd);
- }
- }
----------此题目载于《java编程思想》
解析:此题目应注意4点,1、将String转化为char 2、char 与 character的关系 3、在泛型中,基本类型不起作用。4、LinkedlList
的方法getFirst()在使用前要判断容器是否为空,否则会报错。