1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| class MyCircularDeque {
int[] data; int size, head, tail;
public MyCircularDeque(int k) { data = new int[k]; size = 0; head = 0; tail = k - 1; }
public boolean insertFront(int value) { if (isFull()) return false; head = head == 0 ? data.length - 1 : head - 1; data[head] = value; ++size; return true; }
public boolean insertLast(int value) { if (isFull()) return false; tail = tail == data.length - 1 ? 0 : tail + 1; data[tail] = value; ++size; return true; }
public boolean deleteFront() { if (isEmpty()) return false; head = head == data.length - 1 ? 0 : head + 1; --size; return true; }
public boolean deleteLast() { if (isEmpty()) return false; tail = tail == 0 ? data.length - 1 : tail - 1; --size; return true; }
public int getFront() { return isEmpty() ? -1 : data[head]; }
public int getRear() { return isEmpty() ? -1 : data[tail]; }
public boolean isEmpty() { return size == 0; }
public boolean isFull() { return size == data.length; } }
|