원형 큐를 디자인하라.
Input
["MyCircularQueue", "enQueue", "enQueue", "enQueue", "enQueue", "Rear", "isFull", "deQueue", "enQueue", "Rear"]
[[3], [1], [2], [3], [4], [], [], [], [4], []]
Output
[null, true, true, true, false, 3, true, true, true, 4]
Explanation
MyCircularQueue myCircularQueue = new MyCircularQueue(3);
myCircularQueue.enQueue(1); // return True
myCircularQueue.enQueue(2); // return True
myCircularQueue.enQueue(3); // return True
myCircularQueue.enQueue(4); // return False
myCircularQueue.Rear(); // return 3
myCircularQueue.isFull(); // return True
myCircularQueue.deQueue(); // return True
myCircularQueue.enQueue(4); // return True
myCircularQueue.Rear(); // return 4
Constraints:
class MyCircularQueue {
public:
int *queue;
int front;
int rear;
int maxQueueSize;
MyCircularQueue(int k) {
maxQueueSize = k+1;
queue = new int[maxQueueSize+1];
front = 0;
rear = 0;
}
~MyCircularQueue()
{
delete[] queue;
}
bool enQueue(int value) {
if (isFull()) {
return false;
}
else {
rear = ++rear % maxQueueSize;
queue[rear] = value;
}
return true;
}
bool deQueue() {
if (isEmpty()) {
return false;
}
else {
front = ++front% maxQueueSize;
}
return true;
}
int Front() {
if (isEmpty()) return -1;
else
{
return queue[(front+1) % maxQueueSize];
}
}
int Rear() {
if (isEmpty()) return -1;
else
{
return queue[rear];
}
}
bool isEmpty() {
return (front == rear);
}
bool isFull() {
return (front == (rear + 1) % maxQueueSize);
}
};
/**
* 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();
*/
Runtime 31 ms / Memory 16.7 MB
https://leetcode.com/problems/design-circular-queue/submissions/925094143/