class MyCircularQueue {
int[] cirQueue ;
LinkedList<Integer> queue;
int size ;
int front = 0, rear = 0;
public MyCircularQueue(int k) {
cirQueue = new int[k+1];
queue = new LinkedList<>();
size = k+1;
}
public boolean enQueue(int value) {
// if(size == queue.size()) return false;
// queue.add(value);
// return true;
if(isFull()) return false;
rear = (rear + 1) % size;
cirQueue[rear] = value;
return true;
}
public boolean deQueue() {
//앞에서 빼기
// if(queue.size() <= 0) return false;
// queue.remove(0);
// return true;
if(isEmpty()) return false;
front = (front + 1) % size;
return true;
}
public int Front() {
// return queue.get(0);
return isEmpty() ? -1 : cirQueue[(front+1)%size];
}
public int Rear() {
// return queue.get(queue.size()-1);
return isEmpty() ? -1 : cirQueue[rear];
}
public boolean isEmpty() {
// return queue.size() == 0;
return front == rear ? true : false;
}
public boolean isFull() {
return (rear + 1) % size == front ? true : false;
}
}
/**
* Your MyCircularQueue object will be instantiated and called as such:
* MyCircularQueue obj = new MyCircularQueue(k);
* boolean param_1 = obj.enQueue(value);
* boolean param_2 = obj.deQueue();
* int param_3 = obj.Front();
* int param_4 = obj.Rear();
* boolean param_5 = obj.isEmpty();
* boolean param_6 = obj.isFull();
*/
처음은 쉽게 LinkedList 로 구현하고자 했는데, 크기가 정해지지 않은 부분이다보니 Error 가 발생했다.
아주 원초적인 배열로 접근했고, 추가 인덱스를 rear, 삭제 인덱스를 front 로 지정했다.
추가할 때마다 rear+1 하되 원형이기 때문에 size만큼 % 해준다.
삭제할 때마다는 front+1 하고 굳이 값을 삭제할 필요는 없다.
isFull 은 추가하고자하는 인덱스 (rear+1)%size = front,
isEmpty 는 rear==front