判断存储,是栈?还是队列?
判断一段 输入-输出 模式,是利用了栈还是队列的一个方法
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
判断存储,是栈?还是队列?相关推荐
- 第3章 栈和队列 练习题
一.填空题 1. 向量.栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队首 ...
- 数据结构习题——栈和队列(二)
第3章 栈和队列 一.填空题 1. 线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...
- C语言数据结构-第三章栈和队列-电大同步进度
第三章栈和队列简介 从数据结构角度看,栈和队列是两种重要的线性结构,是一类操作受限制的特殊线性表,其特殊性在于限制插入和删除等运算的位置. 堆栈,限制用户只能在指定的一端插入和删除元素,因此具有后进先 ...
- java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)
实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...
- Problem A: 判断操作是否合法(栈和队列)
Problem A: 判断操作是否合法(栈和队列) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 67 Solved: 22 Description ...
- java判断栈中元素数目_Java数据结构与算法-栈和队列
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- 栈和队列存储结构总结
认识: 栈和队列是线性表的子集 (是插入和删除位置受限的线性表) 一.栈: 1.什么是栈? 栈是一种只能在一端插入或删除操作的线性表 2.栈的特点? 后进先出 3.栈的存储结构 3.1顺序栈 假设栈的 ...
- abap判断包含字符当中包含小数点_剑指Offer整理3 -- 栈和队列 + 数学和字符串
专题3 栈和队列 + 数学和字符串 专题3-1 栈和队列 1. 栈的压入弹出序列 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字 ...
- c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列
前文传送门: 「一本正经的聊数据结构(1):时间复杂度」 「一本正经的聊数据结构(2):数组与向量」 引言 前一篇内容我们介绍了数组和向量,虽然说向量是数组的一个升级版,但是在另一个维度上,他们都属于 ...
最新文章
- STM32PB2(BOOT1)使用注意
- 将 WinForms 应用从 .NET Core 3.0 升级到 3.1
- golang 的 tag
- Bzoj1034 [ZJOI2008]泡泡堂BNB
- 5G时代商业逻辑的五大思考
- ffmpeg系列-解复用流程解析
- C++ STL list容器中元素的存取和访问
- 一台电脑上安装5台tomcat 与 项目部署 probe
- ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
- 寻找二叉树最小叶子节点值
- 使用Excel2016求解运筹学线性规划
- Geotrust证书新申请及续费
- python剔除数据_python实现对excel进行数据剔除操作实例
- 拓扑排序(topo_sort)
- 利用网线在两台电脑之间传输文件
- template和template
- PHP:【商城后台管理系统】admin超级管理员后台操作界面部署{无限级菜单}
- 夜光带你走进C# 游戏开发等(九十二)擅长的领域
- 【论文精度】Subdivision-Based Mesh Convolution Networks
- 像5D动感影院这种新兴的熊十一观影场所你都了解吗?
热门文章
- 网易《社会心理学》笔记(不定时更新)
- 如何下载HLS视频到本地(m3u8)
- React Native按钮详解|Touchable系列组件使用详解
- python小括号( )与中括号 [ ]
- 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...
- 你误解了Windows的文件后缀名吗?
- 2013吉林通化邀请赛 1004 D-City 并查集求连通分支数
- MySQL---分组查询
- 浏览器导入和导出cookie
- 用PS为网迅安卓公司设计基于安卓平台的手机应用图标