641. 设计循环双端队列
代码实现(自解)
class MyCircularDeque {
private:
int *arr;
int size;
int maxSize;
int front;
int rear;
public:
MyCircularDeque(int k) {
arr = new int[k];
size = 0;
maxSize = k;
front = 0;
rear = 0;
}
bool insertFront(int value) {
if (isFull()) return false;
arr[front] = value;
front = (front + 1) % maxSize;
size++;
return true;
}
bool insertLast(int value) {
if (isFull()) return false;
rear -= 1;
if (rear == -1) rear = maxSize - 1;
arr[rear] = value;
size++;
return true;
}
bool deleteFront() {
if (isEmpty()) return false;
front -= 1;
if (front == -1) front = maxSize - 1;
size--;
return true;
}
bool deleteLast() {
if (isEmpty()) return false;
rear = (rear + 1) % maxSize;
size--;
return true;
}
int getFront() {
if (isEmpty()) return -1;
int tmp = front - 1;
if (tmp == -1) tmp = maxSize - 1;
return arr[tmp];
}
int getRear() {
if (isEmpty()) return -1;
return arr[rear];
}
bool isEmpty() {
return !size;
}
bool isFull() {
return size == maxSize;
}
};