【九度】题目1415:不一样的循环队列
-
题目地址:http://ac.jobdu.com/problem.php?pid=1415
题目描述: -
大家都知道数据结构里面有一个结构叫做循环队列。顾名思义,这是一个队列,并且是循环的。但是现在,淘气的囧哥给这个循环队列加上了一些规矩,其中有5条指令:
(1) Push K, 让元素K进队列。
(2) Pop,对头元素出队列。
(3) Query K,查找队列中第K个元素,注意K的合法性。
(4) Isempty,判断队列是否为空。
(5) Isfull,判断队列是否已满。
现在有N行指令,并且告诉你队列大小是M。
- 输入:
-
第一行包含两个整数N和M。1<=N,M<=100000。
接下来有N行,表示指令,指令格式见题目描述。
其中元素均在int范围。
- 输出:
-
对于指令(1),若队列已满,输出failed,否则不做输出。
对于指令(2),若队列已空,输出failed,否则不做输出。
对于指令(3),输出队列中第K个元素,若不存在,输出failed。
对于指令(4)和(5),则用yes或者no回答。
详情见样例。
- 样例输入:
-
12 2
-
Push 1
-
Push 2
-
Push 3
-
Query 2
-
Query 3
-
Isempty
-
Isfull
-
Pop
-
Pop
-
Pop
-
Isempty
-
Isfull
- 样例输出:
-
failed
-
2
-
failed
-
no
-
yes
-
failed
-
yes
-
no
循环队列,底层实现是数组,给出Java和C++的实现。
其实可以不用结构体,直接数组就可以。
C++ AC
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;
#define INF 10000000;
const int maxm = 100002;
struct QueueLoop{int array[maxm];int front;int rear;
};
QueueLoop queue;
int n,m,i;
int len;bool IsEmpty(){int front = queue.front;int rear = queue.rear;if (rear == front) {return true;}return false;
}
bool Isfull(){int front = queue.front;int rear = queue.rear;if ((rear + 1) % len == front) {return true;}return false;
}bool pushElement(int k){if (Isfull()) {return false;}int rear = queue.rear;queue.array[rear] = k;queue.rear = (rear+1) % len;return true;
}bool popElement(){if (IsEmpty()) {return false;}int front = queue.front;queue.front = (front+1) % len;return true;
}void queryElement(int k){int front = queue.front;int rear = queue.rear;if ( k <= 0 || rear - front < k) {printf("failed\n");}else{printf("%d\n",queue.array[k + front - 1]);}
}int main(){while(scanf("%d%d",&n,&m) != EOF){ queue.front = 0;queue.rear = 0;len = m+1;char operate[15];for(i = 0 ; i < n; i++){scanf("%s",operate);if (strcmp(operate,"Push") == 0) {int k;scanf("%d",&k);if (!pushElement(k)) {printf("failed\n");}}else if (strcmp(operate,"Pop") == 0) {if (!popElement()) {printf("failed\n");}}else if (strcmp(operate,"Query") == 0) {int k;scanf("%d",&k);queryElement(k);}else if (strcmp(operate,"Isempty") == 0) {printf("%s\n",IsEmpty() == true ? "yes" :"no");}else {printf("%s\n",Isfull() == true ? "yes" :"no");}}}return 0;
}
/**************************************************************Problem: 1415User: wangzhenqingLanguage: C++Result: AcceptedTime:130 msMemory:1412 kb
****************************************************************/
Java AC 做法1
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;public class Main {/** 1415*/private static QueueLoop queue;private static int len;public static void main(String[] args) throws Exception{StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));while (st.nextToken() != StreamTokenizer.TT_EOF) {int n = (int) st.nval;st.nextToken();int m = (int) st.nval;queue = new QueueLoop(m);len = m + 1;while (n > 0) {n--;st.nextToken();String operate = st.sval;if (operate.equals("Push")) {st.nextToken();int k = (int) st.nval;if (!pushElement(k)) {System.out.println("failed");}}else if (operate.equals("Pop")) {if (!popElement()) {System.out.println("failed");}}else if (operate.equals("Query")) {st.nextToken();int k = (int) st.nval;Integer value = queryElement(k);if (value == null) {System.out.println("failed");}else {System.out.println(value);}}else if (operate.equals("Isempty")) {System.out.println(IsEmpty() == true ? "yes" :"no");}else {System.out.println(Isfull() == true ? "yes" :"no");}}}}private static boolean pushElement(int k){if (Isfull()) {return false;}int rear = queue.rear;int array[] = queue.array;array[rear] = k;queue.array = array;queue.rear = (rear+1) % len;return true;}private static boolean popElement(){if (IsEmpty()) {return false;}int front = queue.front;queue.front = (front+1) % len;return true;}private static Integer queryElement(int k){int front = queue.front;int rear = queue.rear;int array[] = queue.array;if ( k <= 0 || rear - front < k) {return null;}return array[k + front - 1];}private static boolean IsEmpty(){int front = queue.front;int rear = queue.rear;if (rear == front) {return true;}return false;}private static boolean Isfull(){int front = queue.front;int rear = queue.rear;if ((rear + 1) % len == front) {return true;}return false;}public static class QueueLoop{int array[];int front;int rear;public QueueLoop(int[] array, int front, int rear) {super();this.array = array;this.front = front;this.rear = rear;}public QueueLoop(int size) {array = new int[size+1];front = 0;rear = 0;}public QueueLoop() {super();}}
}
/**************************************************************Problem: 1415User: wzqwsrfLanguage: JavaResult: AcceptedTime:2280 msMemory:43496 kb
****************************************************************/
Java AC 做法2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;public class Main {/** 1415*/private static int array[];private static int front , rear;public static void main(String[] args) throws Exception{StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));while (st.nextToken() != StreamTokenizer.TT_EOF) {int n = (int) st.nval;st.nextToken();int m = (int) st.nval;array = new int[m+1];front = rear = -1; while (n > 0) {n--;st.nextToken();String operate = st.sval;if (operate.equals("Push")) {st.nextToken();int k = (int) st.nval;if (rear - front == m) {System.out.println("failed");}else {rear ++;array[rear] = k;}}else if (operate.equals("Pop")) {if (front == rear) {System.out.println("failed");}else {front++;}}else if (operate.equals("Query")) {st.nextToken();int k = (int) st.nval;if ( k <= 0 || rear - front < k) {System.out.println("failed");}else {System.out.println(array[front + k]);}}else if (operate.equals("Isempty")) {System.out.println(rear == front ? "yes" :"no");}else {System.out.println(rear - front == m ? "yes" :"no");}}}}
}/**************************************************************Problem: 1415User: wzqwsrfLanguage: JavaResult: AcceptedTime:2190 msMemory:42104 kb
****************************************************************/
【九度】题目1415:不一样的循环队列相关推荐
- 九度 题目1335:闯迷宫 题目1365:贝多芬第九交响曲
转载请注明本文地址http://blog.csdn.net/yangnanhai93/article/details/40718149 简单说说宽度优先搜索BFS 说实话,这是第一个自己写的宽度优先搜 ...
- c语言题目1120,九度题目1120:全排列
题目1120:全排列 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2749 解决:669 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写 ...
- 九度 题目1044:Pre-Post
转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571 题目链接:http://ac.jobdu.com/problem ...
- 九度 题目1548:平面上的点
题目描述: 给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上. 输入: 包含多组测试数据,每组测试数据由一个整数n(0<=n<=100)开始,代表平面上点的个数. 接下去 ...
- 九度 题目1394:五连击数组
转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40506571 题目链接:http://ac.jobdu.com/problem ...
- 九度 题目1457:非常可乐
题目来源:http://ac.jobdu.com/problem.php?pid=1457 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:514 解决:242 题目描述: 大家一定觉的运 ...
- 九度 题目1013:开门人和关门人
字符串直接比较即可. 偷懒用的sort排序,O(nlogn)的复杂度:若是直接用string存最早到最晚离开的信息,只需要O(n). 代码: #include <iostream> #in ...
- 九度 题目1421:Abor
转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...
- 九度题目1173:查找
原题链接:http://ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 n 输入数组 a[1...n] 输入查找个数m 输入查找数字b[1 ...
- 九度 题目1341:艾薇儿的演唱会(40分)
题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于出现了紧急情况,演唱会的举办方要求艾薇儿提前举行演唱会.艾薇儿现在在北京,她需要找出一条从北京到哈尔滨耗时最短的线路,以 ...
最新文章
- JavaScript中for..in循环陷阱介绍
- Android ViewTreeObserver简介-------------转
- python元素定位id和name_Python Selenium定位html元素|find_element_by_class-name-id-tag-css-xpath-text...
- Open vSwitch系列实验(一):Open vSwitch使用案例扩展实验
- python取反函数_Python优雅的反函数int(string,base)
- Redis(二)原理以及主从复制的实现
- shell脚本连接、读写、操作mysql数据库实例
- python_列表_常用操作
- ArrayList与Vector的区别
- 在Nginx中配置SSL证书
- 案例:如何评价代码走查的效果?
- Flutter Android权限问题
- 知识图谱的构建及用Neo4j和grapheco/InteractiveGraph实现知识图谱的可视化
- LTE Initial Attach 的过程以及相关消息的具体解析 (一)
- npm run build时报错“caniuse-lite is outdated”
- inline-block是什么意思
- 车牌识别计算机应用领域,车牌识别技术应用场景分析
- MAP实现一个key,对应多个Value值。
- Mysql复习资料整理
- 3、JVM JDK 和 JRE