class MyCircularDeque {
//底层数组结构
private int[] deque;
//头指针
private int head;
//尾指针
private int tail;
//队列中实际中存放的数的个数
private int size;
//队列容量
private int capacity;
public MyCircularDeque(int k) {
deque = new int[k];
head = 0;
tail = 0;
size = 0;
capacity = k;
}
public boolean insertFront(int value) {
//如果队列已经满了
if(isFull() == true)
return false;
else{
//在头指针指向位置插入value
deque[head] = value;
//头指针向前移动
head = (head -1 + this.capacity) % this.capacity;
//队列值个数加一
size += 1;
return true;
}
}
public boolean insertLast(int value) {
//如果队列已经满了
if(isFull() == true)
return false;
else{
//尾指针向后移动
tail = (tail + 1 + this.capacity) % this.capacity;
//在尾指针指向位置插入value
deque[tail] = value;
//队列值个数加一
size += 1;
return true;
}
}
public boolean deleteFront() {
//如果队列为空
if(isEmpty())
return false;
else{
head = (head + 1) % this.capacity;
size -= 1;
return true;
}
}
public boolean deleteLast() {
//如果队列为空
if(isEmpty())
return false;
else{
tail = (tail -1 + this.capacity) % this.capacity;
size -= 1;
return true;
}
}
public int getFront() {
if(isEmpty())
return -1;
else{
int front = (head + 1) % this.capacity;
return deque[front];
}
}
public int getRear() {
if(isEmpty())
return -1;
else{
return deque[tail];
}
}
public boolean isEmpty() {
return this.size == 0;
}
public boolean isFull() {
return this.capacity == this.size;
}
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* MyCircularDeque obj = new MyCircularDeque(k);
* boolean param_1 = obj.insertFront(value);
* boolean param_2 = obj.insertLast(value);
* boolean param_3 = obj.deleteFront();
* boolean param_4 = obj.deleteLast();
* int param_5 = obj.getFront();
* int param_6 = obj.getRear();
* boolean param_7 = obj.isEmpty();
* boolean param_8 = obj.isFull();
*/
20220901
class MyCircularDeque {
private int capacity;
private int head;
private int tail;
private int[] deque;
private int size;
public MyCircularDeque(int k) {
this.capacity = k;
this.head = 0;
this.tail = 0;
this.deque = new int[k];
this.size = 0;
}
public boolean insertFront(int value) {
if(isFull() == true)
return false;
this.head = (this.head - 1 + this.capacity) % this.capacity;
this.deque[head] = value;
this.size += 1;
return true;
}
public boolean insertLast(int value) {
if(isFull() == true)
return false;
this.deque[this.tail] = value;
this.tail = (this.tail+1) % this.capacity;
this.size += 1;
return true;
}
public boolean deleteFront() {
if(isEmpty() == true)
return false;
this.head = (this.head + 1) % this.capacity;
this.size -= 1;
return true;
}
public boolean deleteLast() {
if(isEmpty() == true)
return false;
this.tail = (this.tail - 1 + this.capacity) % this.capacity;
this.size -= 1;
return true;
}
public int getFront() {
if(isEmpty())
return -1;
return this.deque[this.head];
}
public int getRear() {
if(isEmpty())
return -1;
return this.deque[(this.tail - 1 + this.capacity) % this.capacity];
}
public boolean isEmpty() {
return this.size == 0;
}
public boolean isFull() {
return this.capacity == this.size;
}
}
/**
* Your MyCircularDeque object will be instantiated and called as such:
* MyCircularDeque obj = new MyCircularDeque(k);
* boolean param_1 = obj.insertFront(value);
* boolean param_2 = obj.insertLast(value);
* boolean param_3 = obj.deleteFront();
* boolean param_4 = obj.deleteLast();
* int param_5 = obj.getFront();
* int param_6 = obj.getRear();
* boolean param_7 = obj.isEmpty();
* boolean param_8 = obj.isFull();
*/