题目1108:堆栈的使用

题目描述:

    堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,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

总结:
  1. 用Scanner取得一个输入流时,先用in(它的变量)的nextInt取得一个整数,并回车结束而不是空格结束,下一次in将取得的是一个空串,而不是想要的,所以要多加一行in.nextLine()来去掉空行
  2. 比较字符串是否相等需要用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 ****************************************************************/
原文地址:https://www.cnblogs.com/qq1029579233/p/4418048.html