判断存储,是栈?还是队列?

  判断一段 输入-输出 模式,是利用了栈还是队列的一个方法

 1 import java.util.*;
 2 
 3 public class Stack_Queue {
 4         static Scanner sc = new Scanner(System.in);
 5         
 6         public static boolean isQueue(int a[], int n){
 7             Queue<Integer> p = new LinkedList<Integer>();
 8             int t = 1;
 9             for(int i = 0; i < n; i++){
10                 while(t <= n || (!p.isEmpty() && p.peek() <= n)){
11 //                  System.out.println("p.peek="+p.peek()+",t="+t+",a="+a[i]);
12                     if(!p.isEmpty() && p.peek() == a[i]){
13 //                      System.out.println("p="+p.peek()+"->out");
14                         p.poll();
15                         break;
16                     }
17                     else if(t == a[i]){
18 //                      System.out.println(t+"->out");
19                         t++;
20                         break;
21                     }
22 //                  System.out.println("noout,"+t+"->p");
23                     p.add(t++);
24                     if(t > n+1)
25                         break;
26                 }
27             }
28             return p.isEmpty();
29         }
30         public static boolean isStack(int a[], int n){
31             Stack<Integer> s = new Stack<Integer>();
32             int k = 1;
33             for(int i = 0; i < n; i++){
34                 while((s.isEmpty() || s.peek() != a[i]) && k <= n){
35                     s.push(k++);
36 //                    System.out.print("s.peek="+s.peek()+",");
37                 }
38                 if(!s.isEmpty() && s.peek() == a[i])
39                     s.pop();
40             }
41             return s.isEmpty();
42         }
43         
44         public static void Stack_Or_Queue(String[] args) {
45             int id = 1;
46             while(sc.hasNext()){
47                 while(sc.hasNext()){
48                     int n = sc.nextInt();
49                     if(n == 0)    break;
50                     Queue<Integer> p = new LinkedList<Integer>();
51                     Stack<Integer> s = new Stack<Integer>();
52                     int[] a = new int[n];
53                     for(int i = 0; i < n; i++)
54                         a[i] = sc.nextInt();
55                     
56                     for(int i = 0; i < n; i++){
57                         if(i != n-1)
58                             System.out.print(a[i] + " ");
59                         else
60                             System.out.print(a[i] + ":");
61                     }
62                     if(isStack(a, n) && isQueue(a, n))
63                         System.out.println("both");
64                     else if(isStack(a, n))
65                         System.out.println("stack");
66                     else if(isQueue(a, n))
67                         System.out.println("queue");
68                     else
69                         System.out.println("neither");
70                 }
71                 
72             }
73             
74             System.gc();sc.close();
75         }
76 }

猜你喜欢

转载自www.cnblogs.com/AardWolf/p/10056402.html