设计实现双端队列。
实现 MyCircularDeque
类:
MyCircularDeque(int k)
:构造函数,双端队列最大为k
。boolean insertFront()
:将一个元素添加到双端队列头部。 如果操作成功返回true
,否则返回false
。boolean insertLast()
:将一个元素添加到双端队列尾部。如果操作成功返回true
,否则返回false
。boolean deleteFront()
:从双端队列头部删除一个元素。 如果操作成功返回true
,否则返回false
。boolean deleteLast()
:从双端队列尾部删除一个元素。如果操作成功返回true
,否则返回false
。int getFront()
):从双端队列头部获得一个元素。如果双端队列为空,返回-1
。int getRear()
:获得双端队列的最后一个元素。 如果双端队列为空,返回-1
。boolean isEmpty()
:若双端队列为空,则返回true
,否则返回false
。boolean isFull()
:若双端队列满了,则返回true
,否则返回false
。
示例 1:
输入 ["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"] [[3], [1], [2], [3], [4], [], [], [], [4], []] 输出 [null, true, true, true, false, 2, true, true, true, 4] 解释 MyCircularDeque circularDeque = new MycircularDeque(3); // 设置容量大小为3 circularDeque.insertLast(1); // 返回 true circularDeque.insertLast(2); // 返回 true circularDeque.insertFront(3); // 返回 true circularDeque.insertFront(4); // 已经满了,返回 false circularDeque.getRear(); // 返回 2 circularDeque.isFull(); // 返回 true circularDeque.deleteLast(); // 返回 true circularDeque.insertFront(4); // 返回 true circularDeque.getFront(); // 返回 4
提示:
1 <= k <= 1000
0 <= value <= 1000
insertFront
,insertLast
,deleteFront
,deleteLast
,getFront
,getRear
,isEmpty
,isFull
调用次数不大于2000
次
标签:
['设计', '队列', '数组', '链表']难度:Medium
喜欢:159双端循环队列 额外支持 两个操作:
- 队头插入
- 队尾删除
class MyCircularDeque
{
public:
int *q;
int K;
int hh = 0, tt = 0;
MyCircularDeque(int k)
{
K = k + 1;
q = new int[K];
}
bool insertFront(int value)
{
if (isFull())
return false;
hh = (hh - 1 + K) % K;
q[hh] = value;
return true;
}
bool insertLast(int value)
{
if (isFull())
return false;
q[tt % K] = value;
tt = (tt + 1) % K;
return true;
}
bool deleteFront()
{
if (isEmpty())
return false;
hh = (hh + 1) % K;
return true;
}
bool deleteLast()
{
if (isEmpty())
return false;
tt = (tt - 1 + K) % K;
return true;
}
int getFront()
{
if (isEmpty()) return -1;
return q[hh];
}
int getRear()
{
if (isEmpty())
return -1;
return q[(tt - 1 + K) % K];
}
bool isEmpty()
{
return hh == tt;
}
bool isFull()
{
return (tt + 1) % K == hh;
}
};