- 题目描述:
-
堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。Push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。
- 输入:
-
对于每组测试数据,第一行是一个正整数 n,0<n<=10000(n=0 结束)。而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示将栈顶的值 pop 出来,如果堆栈中没有元素时,忽略本次操作;如果是'A’,表示询问当前栈顶的值,如果当时栈为空,则输出'E'。堆栈开始为空。
- 输出:
-
对于每组测试数据,根据其中的命令字符来处理堆栈;并对所有的'A’操作,输出当时栈顶的值,每个占据一行,如果当时栈为空,则输出'E’。当每组测试数据完成后,输出一个空行。
- 样例输入:
-
3 A P 5 A 4 P 3 P 6 O A 0
- 样例输出:
-
E 5 3
总结:
- 用Scanner取得一个输入流时,先用in(它的变量)的nextInt取得一个整数,并回车结束而不是空格结束,下一次in将取得的是一个空串,而不是想要的,所以要多加一行in.nextLine()来去掉空行
- 比较字符串是否相等需要用String的equals,而不能直接用==,原因很简单。
1 import java.util.Scanner; 2 import java.util.Stack; 3 4 public class Main{ 5 public static void main(String[] args){ 6 Scanner in=new Scanner(System.in); 7 int n; 8 n=in.nextInt(); 9 while(n!=0){ 10 Stack<Integer> st=new Stack(); 11 String line=in.nextLine(); 12 String[] t; 13 14 for(int i=0;i<n;i++){ 15 line=in.nextLine(); 16 t=line.split(" "); 17 if(t[0].equals("P")){ 18 st.push(Integer.parseInt(t[1])); 19 } 20 else if(t[0].equals("O")){ 21 if(!st.isEmpty()) 22 st.pop(); 23 } 24 else if(t[0].equals("A")){ 25 if(st.isEmpty()) 26 System.out.println("E"); 27 else 28 System.out.println(st.peek()); 29 } 30 } 31 System.out.println(); 32 n=in.nextInt(); 33 } 34 } 35 } 36 /************************************************************** 37 Problem: 1108 38 User: 0000H 39 Language: Java 40 Result: Accepted 41 Time:1570 ms 42 Memory:111344 kb 43 ****************************************************************/