当前位置:网站首页>LeetCode 622. 设计循环队列
LeetCode 622. 设计循环队列
2022-08-03 19:52:00 【JIeJaitt】
设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:
MyCircularQueue(k)
: 构造器,设置队列长度为 k 。Front
: 从队首获取元素。如果队列为空,返回 -1 。Rear
: 获取队尾元素。如果队列为空,返回 -1 。enQueue(value)
: 向循环队列插入一个元素。如果成功插入则返回真。deQueue()
: 从循环队列中删除一个元素。如果成功删除则返回真。isEmpty()
: 检查循环队列是否为空。isFull()
: 检查循环队列是否已满。
示例:
MyCircularQueue circularQueue = new MyCircularQueue(3); // 设置长度为 3 circularQueue.enQueue(1); // 返回 true circularQueue.enQueue(2); // 返回 true circularQueue.enQueue(3); // 返回 true circularQueue.enQueue(4); // 返回 false,队列已满 circularQueue.Rear(); // 返回 3 circularQueue.isFull(); // 返回 true circularQueue.deQueue(); // 返回 true circularQueue.enQueue(4); // 返回 true circularQueue.Rear(); // 返回 4
提示:
- 所有的值都在 0 至 1000 的范围内;
- 操作数将在 1 至 1000 的范围内;
- 请不要使用内置的队列库。
class MyCircularQueue {
private:
int front;
int rear;
int capacity;
vector<int> elements;
public:
MyCircularQueue(int k) {
this->capacity = k + 1;
this->elements = vector<int>(capacity);
rear = front = 0;
}
bool enQueue(int value) {
if (isFull()) {
return false;
}
elements[rear] = value;
rear = (rear + 1) % capacity;
return true;
}
bool deQueue() {
if (isEmpty()) {
return false;
}
front = (front + 1) % capacity;
return true;
}
int Front() {
if (isEmpty()) {
return -1;
}
return elements[front];
}
int Rear() {
if (isEmpty()) {
return -1;
}
return elements[(rear - 1 + capacity) % capacity];
}
bool isEmpty() {
return rear == front;
}
bool isFull() {
return ((rear + 1) % capacity) == front;
}
};
type MyCircularQueue struct {
front, rear int
elements []int
}
func Constructor(k int) MyCircularQueue {
return MyCircularQueue{
elements:make([]int,k+1)}
}
func (q *MyCircularQueue) EnQueue(value int) bool {
if q.IsFull() {
return false
}
q.elements[q.rear] = value
q.rear = (q.rear + 1) % len(q.elements)
return true
}
func (q *MyCircularQueue) DeQueue() bool {
if q.IsEmpty() {
return false
}
q.front = (q.front + 1) % len(q.elements)
return true
}
func (q MyCircularQueue) Front() int {
if q.IsEmpty() {
return -1
}
return q.elements[q.front]
}
func (q MyCircularQueue) Rear() int {
if q.IsEmpty() {
return -1
}
return q.elements[(q.rear-1+len(q.elements))%len(q.elements)]
}
func (q MyCircularQueue) IsEmpty() bool {
return q.rear == q.front
}
func (q MyCircularQueue) IsFull() bool {
return (q.rear+1)%len(q.elements) == q.front
}
/** * Your MyCircularQueue object will be instantiated and called as such: * obj := Constructor(k); * param_1 := obj.EnQueue(value); * param_2 := obj.DeQueue(); * param_3 := obj.Front(); * param_4 := obj.Rear(); * param_5 := obj.IsEmpty(); * param_6 := obj.IsFull(); */
边栏推荐
- Brush the topic of mobile zero power button
- MySQL master-slave, 6 minutes you master!
- 虚拟机vmware设置桥接模式上网
- 亚马逊云科技 Build On 2022 - AIot 第二季物联网专场实验心得
- 汉源高科8光口12电口交换机千兆8光8电12电16电网管型工业以太网交换机
- 利用net-snmp的库实现snmpget,snmpset
- 揭秘5名运维如何轻松管理数亿级流量系统
- 详解AST抽象语法树
- node版本切换工具NVM以及npm源管理器nrm
- Interview Blitz: What Are Sticky Packs and Half Packs?How to deal with it?
猜你喜欢
随机推荐
Use ControlTemplate or Style from resource file in WPF .cs and find the control
X86 function call model analysis
622 设计循环队列——Leetcode天天刷【循环队列,数组模拟,双指针】(2022.8.2)
ESP8266-Arduino编程实例-BH1750FVI环境光传感器驱动
汉源高科8光口12电口交换机千兆8光8电12电16电网管型工业以太网交换机
Interview Blitz: What Are Sticky Packs and Half Packs?How to deal with it?
net-snmp编译报错:/usr/bin/ld: cannot find crti.o: No such file or directory
Climbing Stairs (7/30)
【leetcode】剑指 Offer II 007. 数组中和为 0 的三个数(双指针)
Jingdong cloud released a new generation of distributed database StarDB 5.0
边缘盒子+时序数据库,美的数字化平台 iBuilding 背后的技术选型
危化企业双重预防机制数字化建设进入全面实施阶段
消除对特权账户的依赖使用Kaniko构建镜像
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting
Redis 内存满了怎么办?这样置才正确!
详解AST抽象语法树
头条服务端一面经典10道面试题解析
Reveal how the five operational management level of hundreds of millions of easily flow system
Introduction to Cosine Distance
MySQL master-slave, 6 minutes you master!