zoukankan      html  css  js  c++  java
  • 判断存储,是栈?还是队列?

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

     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 }
  • 相关阅读:
    kafka集群管理
    kafka server管理
    kafka 日志结构
    kafka消费者基本操作
    kafka 生产者基本操作
    kafka主题管理
    kafka基础知识
    centos7.0安装docker-18.06.1-ce不能启动问题
    spec 文件详解
    rpmbuild 源码打包clickhouse,附带打好的rpm包下载地址
  • 原文地址:https://www.cnblogs.com/AardWolf/p/10056402.html
Copyright © 2011-2022 走看看