当前位置:网站首页>【LeetCode】622. Design Circular Queue
【LeetCode】622. Design Circular Queue
2022-08-03 08:40:00 【Crispy~】
题目
设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 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 {
public:
int* mycircularqueue;
int lenght = 0;
int rear = 0;
int front = 0;
int flag = 0;
MyCircularQueue(int k) {
lenght = k;
mycircularqueue = new int[lenght]();
}
bool enQueue(int value) {
if(isFull())
return false;
mycircularqueue[rear] = value;
rear = (rear+1)%lenght;
if(front == rear)
flag = 1;
return true;
}
bool deQueue() {
if(isEmpty())
return false;
front = (front+1)%lenght;
if(front == rear)
flag = 0;
return true;
}
int Front() {
if(isEmpty())
return -1;
return mycircularqueue[front];
}
int Rear() {
if(isEmpty())
return -1;
return mycircularqueue[(rear+lenght-1)%lenght];
}
bool isEmpty() {
return (rear == front && flag==0);
}
bool isFull() {
return (rear == front && flag==1);
}
};
/** * 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(); */
边栏推荐
- 【收获合辑】k-NN与检索任务的异同+jupyter转pdf
- Transformer、BERT、GPT 论文精读笔记
- swiper分类菜单双层效果demo(整理)
- 浅析什么是伪类和伪元素?伪类和伪元素的区别解析
- HCIA实验(07)
- 10 minutes to get you started chrome (Google) browser plug-in development
- dflow入门1——HelloWorld!
- uni-app 顶部选项卡吸附效果 demo(整理)
- 《剑指Offer》刷题之打印从1到最大的n位数
- 110 MySQL interview questions and answers (continuous updates)
猜你喜欢

Docker启动mysql

行业 SaaS 微服务稳定性保障实战

Evaluate: A detailed introduction to the introduction of huggingface evaluation indicator module

Using pipreqs export requirements needed for the project. TXT (rather than the whole environment)
redis stream 实现消息队列

HCIP练习02(OSPF)

Nacos使用实践

How does Mysql query two data tables for the same fields in two tables at the same time

机器学习(公式推导与代码实现)--sklearn机器学习库

Eject stubborn hard drives with diskpart's offline command
随机推荐
ceph简介
【TPC-DS】DF的SQL(Data Maintenance部分)
Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容
0day_Topsec上网行为管理RCE
内存模型之可见性
What are pseudo-classes and pseudo-elements?The difference between pseudo-classes and pseudo-elements
多线程下的单例模式
【LeetCode】101.对称二叉树
进程的创建
dflow入门2——Slices
Guava-字符串工具
MySQL1
判断根节点是否等于子节点之和
【TPC-DS】25张表的详细介绍,SQL的查询特征
pytorch one-hot tips
swiper分类菜单双层效果demo(整理)
"Swordsman Offer" brush questions print from 1 to the largest n digits
Arduino框架下对ESP32 NVS非易失性存储解读以及应用示例
gpnmb+ gpnmb-AT2 cell空转映射 上皮细胞的空转映射
netstat 及 ifconfig 是如何工作的。