[LeetCode] 622.Design Circular Queue 设计环形队列
Design your implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle and the last position is connected back to the first position to make a circle. It is also called "Ring Buffer".
One of the benefits of the circular queue is that we can make use of the spaces in front of the queue. In a normal queue, once the queue becomes full, we cannot insert the next element even if there is a space in front of the queue. But using the circular queue, we can use the space to store new values.
Your implementation should support following operations:
MyCircularQueue(k)
: Constructor, set the size of the queue to be k.Front
: Get the front item from the queue. If the queue is empty, return -1.Rear
: Get the last item from the queue. If the queue is empty, return -1.enQueue(value)
: Insert an element into the circular queue. Return true if the operation is successful.deQueue()
: Delete an element from the circular queue. Return true if the operation is successful.isEmpty()
: Checks whether the circular queue is empty or not.isFull()
: Checks whether the circular queue is full or not.
Example:
- MyCircularQueue circularQueue = new MyCircularQueue(3); // set the size to be 3
- circularQueue.enQueue(1); // return true
- circularQueue.enQueue(2); // return true
- circularQueue.enQueue(3); // return true
- circularQueue.enQueue(4); // return false, the queue is full
- circularQueue.Rear(); // return 3
- circularQueue.isFull(); // return true
- circularQueue.deQueue(); // return true
- circularQueue.enQueue(4); // return true
- circularQueue.Rear(); // return 4
Note:
- All values will be in the range of [0, 1000].
- The number of operations will be in the range of [1, 1000].
- Please do not use the built-in Queue library.
设计一个环形队列,包含以下几个操作功能:设置队列大小,获取前一个元素,获取最后一个元素,插入一个元素,删除一个元素,判断队列是否满了,判断队列是否为空。不能用内置的Queue函数库。
解法:数组
Java:
- class MyCircularQueue {
- final int[] a;
- int front, rear = -1, len = 0;
- public MyCircularQueue(int k) { a = new int[k];}
- public boolean enQueue(int val) {
- if (!isFull()) {
- rear = (rear + 1) % a.length;
- a[rear] = val;
- len++;
- return true;
- } else return false;
- }
- public boolean deQueue() {
- if (!isEmpty()) {
- front = (front + 1) % a.length;
- len--;
- return true;
- } else return false;
- }
- public int Front() { return isEmpty() ? -1 : a[front];}
- public int Rear() {return isEmpty() ? -1 : a[rear];}
- public boolean isEmpty() { return len == 0;}
- public boolean isFull() { return len == a.length;}
- }
Python:
- class Node:
- def __init__(self, value):
- self.val = value
- self.next = self.pre = None
- class MyCircularQueue:
- def __init__(self, k):
- self.size = k
- self.curSize = 0
- self.head = self.tail = Node(-1)
- self.head.next = self.tail
- self.tail.pre = self.head
- def enQueue(self, value):
- if self.curSize < self.size:
- node = Node(value)
- node.pre = self.tail.pre
- node.next = self.tail
- node.pre.next = node.next.pre = node
- self.curSize += 1
- return True
- return False
- def deQueue(self):
- if self.curSize > 0:
- node = self.head.next
- node.pre.next = node.next
- node.next.pre = node.pre
- self.curSize -= 1
- return True
- return False
- def Front(self):
- return self.head.next.val
- def Rear(self):
- return self.tail.pre.val
- def isEmpty(self):
- return self.curSize == 0
- def isFull(self):
- return self.curSize == self.size
C++:
- class MyCircularQueue {
- public:
- /** Initialize your data structure here. Set the size of the queue to be k. */
- MyCircularQueue(int k) {
- data.resize(k);
- head = 0;
- tail = 0;
- reset = true;
- }
- /** Insert an element into the circular queue. Return true if the operation is successful. */
- bool enQueue(int value) {
- if (isFull()) return false;
- // update the reset value when first enqueue happens
- if (head == tail && reset) reset = false;
- data[tail] = value;
- tail = (tail + 1) % data.size();
- return true;
- }
- /** Delete an element from the circular queue. Return true if the operation is successful. */
- bool deQueue() {
- if (isEmpty()) return false;
- head = (head + 1) % data.size();
- // update the reset value when last dequeue happens
- if (head == tail && !reset) reset = true;
- return true;
- }
- /** Get the front item from the queue. */
- int Front() {
- if (isEmpty()) return -1;
- return data[head];
- }
- /** Get the last item from the queue. */
- int Rear() {
- if (isEmpty()) return -1;
- return data[(tail + data.size() - 1) % data.size()];
- }
- /** Checks whether the circular queue is empty or not. */
- bool isEmpty() {
- if (tail == head && reset) return true;
- return false;
- }
- /** Checks whether the circular queue is full or not. */
- bool isFull() {
- if (tail == head && !reset) return true;
- return false;
- }
- private:
- vector<int> data;
- int head;
- int tail;
- // reset is the mark when the queue is empty
- // to differentiate from queue is full
- // because in both conditions (tail == head) stands
- bool reset;
- };
- /**
- * Your MyCircularQueue object will be instantiated and called as such:
- * MyCircularQueue obj = new MyCircularQueue(k);
- * bool param_1 = obj.enQueue(value);
- * bool param_2 = obj.deQueue();
- * int param_3 = obj.Front();
- * int param_4 = obj.Rear();
- * bool param_5 = obj.isEmpty();
- * bool param_6 = obj.isFull();
- */
类似题目:
[LeetCode] 641.Design Circular Deque 设计环形双向队列
All LeetCode Questions List 题目汇总
[LeetCode] 622.Design Circular Queue 设计环形队列的更多相关文章
- [LeetCode] Design Circular Queue 设计环形队列
Design your implementation of the circular queue. The circular queue is a linear data structure in w ...
- [LeetCode] 641.Design Circular Deque 设计环形双向队列
Design your implementation of the circular double-ended queue (deque). Your implementation should su ...
- Leetcode622.Design Circular Queue设计循环队列
设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一个好处是 ...
- LeetCode 622. Design Circular Queue
原题链接在这里:https://leetcode.com/problems/design-circular-queue/ 题目: Design your implementation of the c ...
- [LeetCode] Design Circular Deque 设计环形双向队列
Design your implementation of the circular double-ended queue (deque). Your implementation should su ...
- 【LeetCode】622. Design Circular Queue 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 用直的代替弯的 数组循环利用 日期 题目地址:htt ...
- 【leetcode】622. Design Circular Queue
题目如下: Design your implementation of the circular queue. The circular queue is a linear data structur ...
- LeetCode 622:设计循环队列 Design Circular Queue
LeetCode 622:设计循环队列 Design Circular Queue 首先来看看队列这种数据结构: 队列:先入先出的数据结构 在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素 ...
- LeetCode 641. Design Circular Deque
原题链接在这里:https://leetcode.com/problems/design-circular-deque/ 题目: Design your implementation of the c ...
随机推荐
- RabbitMQ 部署记录
1. erlang与rabbitmq版本对应关系: https://www.rabbitmq.com/which-erlang.html 2. 安装erlang 下载地址:http://www.erl ...
- keil中error: #70: incomplete type is not allowed—解决方法
今天在写程序的时候,想使用sizeof求数组的大小,数组中其他c文件定义,在头文件使用extern uint8_t buff_value[]; 声明 但是keil编译报错,网上查了,发现,需要写成ex ...
- How do I fix "selector not recognized" runtime exceptions when trying to use category methods from a static library?
https://developer.apple.com/library/content/qa/qa1490/_index.html A: If you're seeing a "select ...
- NSKeyedArchiver : NSCoder
NSKeyedArchiver : NSCoder @interface NSData : NSObject <NSCopying, NSMutableCopying, NSSecureCodi ...
- Markdown&Latex学习笔记,qwq
目录 推荐的文章 居中 字体 加颜色 指数 分数 根号 神奇的符号(不要多想qwq) 箭头 小于号 大括号 累加符号 累乘符号 下标 \(\phi\)&\(\varphi\) \(\equiv ...
- 使用apt-mirror搭建debian镜像源
debian官方提供了脚本ftpsync来搭建源镜像,而 apt-mirror 是一个更简单便捷的源镜像搭建工具. 安装 apt-mirror sudo apt-get install apt-mir ...
- Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法
1 简介 Ubuntu 16.04安装完后,还需要做一些配置才能愉快的使用,包括添加软件源.安装搜狗输入法.Chrome浏览器.网易云音乐.配置快捷键.安装git等等,下面就跟着我来配置吧,just ...
- <每日 1 OJ> -24. The Simple Problem
题目描述 Solo上了大学,对数学很感兴趣,有一天他面对数分三,一个Sequence(数列)摆在了他面前,这可难住他了……序列如下:S(a,k,n)=a+(k+a)+(2k+a)+…+(nk+a),题 ...
- html内获取当前文件路径,页面获取当前路径
function getRealPath(){ var curWwwPath = window.document.location.href; var pathName = window.docume ...
- zabbix 自动发现 监控 硬盘读写 disk io
直接 上配置: 1.配置文件 cat userparameter_harddisk.conf #discovery hard diskUserParameter=custom.vfs.discover ...