题目地址: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:不一样的循环队列相关推荐

  1. 九度 题目1335:闯迷宫 题目1365:贝多芬第九交响曲

    转载请注明本文地址http://blog.csdn.net/yangnanhai93/article/details/40718149 简单说说宽度优先搜索BFS 说实话,这是第一个自己写的宽度优先搜 ...

  2. c语言题目1120,九度题目1120:全排列

    题目1120:全排列 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2749 解决:669 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写 ...

  3. 九度 题目1044:Pre-Post

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571 题目链接:http://ac.jobdu.com/problem ...

  4. 九度 题目1548:平面上的点

    题目描述: 给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上. 输入: 包含多组测试数据,每组测试数据由一个整数n(0<=n<=100)开始,代表平面上点的个数. 接下去 ...

  5. 九度 题目1394:五连击数组

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40506571 题目链接:http://ac.jobdu.com/problem ...

  6. 九度 题目1457:非常可乐

    题目来源:http://ac.jobdu.com/problem.php?pid=1457 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:514 解决:242 题目描述: 大家一定觉的运 ...

  7. 九度 题目1013:开门人和关门人

    字符串直接比较即可. 偷懒用的sort排序,O(nlogn)的复杂度:若是直接用string存最早到最晚离开的信息,只需要O(n). 代码: #include <iostream> #in ...

  8. 九度 题目1421:Abor

    转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...

  9. 九度题目1173:查找

    原题链接:http://ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 n  输入数组      a[1...n]  输入查找个数m  输入查找数字b[1 ...

  10. 九度 题目1341:艾薇儿的演唱会(40分)

    题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于出现了紧急情况,演唱会的举办方要求艾薇儿提前举行演唱会.艾薇儿现在在北京,她需要找出一条从北京到哈尔滨耗时最短的线路,以 ...

最新文章

  1. JavaScript中for..in循环陷阱介绍
  2. Android ViewTreeObserver简介-------------转
  3. python元素定位id和name_Python Selenium定位html元素|find_element_by_class-name-id-tag-css-xpath-text...
  4. Open vSwitch系列实验(一):Open vSwitch使用案例扩展实验
  5. python取反函数_Python优雅的反函数int(string,base)
  6. Redis(二)原理以及主从复制的实现
  7. shell脚本连接、读写、操作mysql数据库实例
  8. python_列表_常用操作
  9. ArrayList与Vector的区别
  10. 在Nginx中配置SSL证书
  11. 案例:如何评价代码走查的效果?
  12. Flutter Android权限问题
  13. 知识图谱的构建及用Neo4j和grapheco/InteractiveGraph实现知识图谱的可视化
  14. LTE Initial Attach 的过程以及相关消息的具体解析 (一)
  15. npm run build时报错“caniuse-lite is outdated”
  16. inline-block是什么意思
  17. 车牌识别计算机应用领域,车牌识别技术应用场景分析
  18. MAP实现一个key,对应多个Value值。
  19. Mysql复习资料整理
  20. 3、JVM JDK 和 JRE

热门文章

  1. python网页请求谷歌翻译实现文本翻译
  2. 禁用一个右下角广告弹窗的程序 popwndexe.exe
  3. 手机上怎么打字才能快?
  4. django项目环境搭建
  5. 如何从0开始在鸿蒙OS中制作一个APP!
  6. vue:实现前端生成并下载二维码(使用qrcodejs2插件)
  7. 微信公众号文章怎么搞成html,微信公众号文章中的引导样式如何设置成签名模板?...
  8. Mp异常:xxx. Not Found TableInfoCache
  9. 初始化string对象时,申请空间的秘密
  10. 网络爬虫框架Scrapy简介