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

 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 }

转载于:https://www.cnblogs.com/AardWolf/p/10056402.html

判断存储,是栈?还是队列?相关推荐

  1. 第3章 栈和队列 练习题

    一.填空题 1. 向量.栈和队列都是  线性   结构,可以在向量的  任何     位置插入和删除元素:对于栈只能在   栈顶   插入和删除元素:对于队列只能在   队尾    插入和   队首  ...

  2. 数据结构习题——栈和队列(二)

    第3章  栈和队列    一.填空题 1.  线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...

  3. C语言数据结构-第三章栈和队列-电大同步进度

    第三章栈和队列简介 从数据结构角度看,栈和队列是两种重要的线性结构,是一类操作受限制的特殊线性表,其特殊性在于限制插入和删除等运算的位置. 堆栈,限制用户只能在指定的一端插入和删除元素,因此具有后进先 ...

  4. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  5. Problem A: 判断操作是否合法(栈和队列)

    Problem A: 判断操作是否合法(栈和队列) Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 67  Solved: 22 Description ...

  6. java判断栈中元素数目_Java数据结构与算法-栈和队列

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  7. 栈和队列存储结构总结

    认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...

  8. abap判断包含字符当中包含小数点_剑指Offer整理3 -- 栈和队列 + 数学和字符串

    专题3 栈和队列 + 数学和字符串 专题3-1 栈和队列 1. 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字 ...

  9. c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列

    前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...

最新文章

  1. STM32PB2(BOOT1)使用注意
  2. 将 WinForms 应用从 .NET Core 3.0 升级到 3.1
  3. golang 的 tag
  4. Bzoj1034 [ZJOI2008]泡泡堂BNB
  5. 5G时代商业逻辑的五大思考
  6. ffmpeg系列-解复用流程解析
  7. C++ STL list容器中元素的存取和访问
  8. 一台电脑上安装5台tomcat 与 项目部署 probe
  9. ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
  10. 寻找二叉树最小叶子节点值
  11. 使用Excel2016求解运筹学线性规划
  12. Geotrust证书新申请及续费
  13. python剔除数据_python实现对excel进行数据剔除操作实例
  14. 拓扑排序(topo_sort)
  15. 利用网线在两台电脑之间传输文件
  16. template和template
  17. PHP:【商城后台管理系统】admin超级管理员后台操作界面部署{无限级菜单}
  18. 夜光带你走进C# 游戏开发等(九十二)擅长的领域
  19. 【论文精度】Subdivision-Based Mesh Convolution Networks
  20. 像5D动感影院这种新兴的熊十一观影场所你都了解吗?

热门文章

  1. 网易《社会心理学》笔记(不定时更新)
  2. 如何下载HLS视频到本地(m3u8)
  3. React Native按钮详解|Touchable系列组件使用详解
  4. python小括号( )与中括号 [ ]
  5. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...
  6. 你误解了Windows的文件后缀名吗?
  7. 2013吉林通化邀请赛 1004 D-City 并查集求连通分支数
  8. MySQL---分组查询
  9. 浏览器导入和导出cookie
  10. 用PS为网迅安卓公司设计基于安卓平台的手机应用图标