1οΈβ£ Circular Queue(μν ν)λ₯Ό λ°°μ΄λ‘ ꡬνμ rearλ₯Ό -1μΌλ‘ μ€μ νμ§ μλ μ΄μ .
Javaμμ μν νλ₯Ό ꡬνν λ βrearβ μ μ΄κΈ°κ°μ β-1β λ‘ μ€μ νμ§ μλ μ΄μ λ μ¬λ¬ κ°μ§κ° μμ΅λλ€.
μ£Όμ μ΄μ λ νμ μΈλ±μ±μ λ¨μννκ³ , λ Όλ¦¬μ μΈ νλ¦μ μΌκ΄λκ² μ μ§νκΈ° μν¨μ λλ€.
λ€μμ κ·Έ μ΄μ λ₯Ό μμΈν μ€λͺ ν κ²μ λλ€.
1οΈβ£ μΈλ±μ€μ μΌκ΄μ± μ μ§.
-
βrearβ λ₯Ό β0β μΌλ‘ μ΄κΈ°ννλ©΄ νμ μΈλ±μ±μ΄ λ¨μν΄μ§λλ€.
- βrearβ μ βfrontβ λͺ¨λ 0μμ μμνμ¬, νμ ν¬κΈ°λ₯Ό βcapacityβ λ‘ λλ λλ¨Έμ§λ₯Ό μ¬μ©νμ¬ μΈλ±μ€λ₯Ό μνμν΅λλ€.
- μ΄λ λͺ¨λλ‘ μ°μ°μ μ¬μ©νμ¬ μΈλ±μ€λ₯Ό κ΄λ¦¬νλ λ° μμ΄ νΈλ¦¬ν©λλ€.
-
βrearβ λ₯Ό β-1β λ‘ μ€μ ν κ²½μ°, μμλ₯Ό μΆκ°ν λλ§λ€ λ§€λ² βrearβ λ₯Ό β0β μΌλ‘ μ‘°μ νλ νΉλ³ν μ²λ¦¬κ° νμνκ² λ©λλ€.
- μ΄λ μ½λμ 볡μ‘μ±μ μ¦κ°μν€κ³ μ€μμ κ°λ₯μ±μ λμ λλ€.
2οΈβ£ μ½λμ λ¨μν.
-
βrearβ λ₯Ό β0β μΌλ‘ μ΄κΈ°ννλ©΄ μ΄κΈ° μνμ μμ μΆκ°, μμ μ λ³λμ 쑰건 κ²μ¬λ₯Ό μ€μΌ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄ βrearβ κ° β-1β μΈμ§ νμΈνλ μΆκ° 쑰건문μ νΌν μ μμ΅λλ€.
- β0β λΆν° μμνλ©΄ βenqueueβ μ βdequeueβ μ°μ°μμ βrearβ μ βfrontβ μΈλ±μ€μ μ¦κ°μ κ°μκ° μΌκ΄λκ² μ²λ¦¬λ©λλ€.
3οΈβ£ νΈλ¦¬ν μ΄κΈ° μν μ²λ¦¬.
-
βrearβ λ₯Ό β0β μΌλ‘ μ€μ νλ©΄ μ΄κΈ° μνμμ νκ° λΉμ΄ μλμ§ νμΈνλ κ²μ΄ λ μ§κ΄μ μ
λλ€.
- μλ₯Ό λ€μ΄ βisEmptyβ λ©μλλ λ¨μν βsizeβ λ³μλ₯Ό νμΈνμ¬ νκ° λΉμ΄ μλμ§ νμΈν μ μμ΅λλ€. βrearβ κ° β-1β μ΄λ©΄ μΆκ°μ μΈ μν κ²μ¬κ° νμν μ μμ΅λλ€.
2οΈβ£ μμ μ½λ.
λ€μμ βrearβ μ μ΄κΈ°κ°μ β0β μΌλ‘ μ€μ νλ μν νμ μ½λμ λλ€.
public class CircularQueue {
private int[] queue;
private int front;
private int rear;
private int size;
private int capacity;
public CircularQueue(int capacity) {
this.capacity = capacity;
this.queue = new int[capacity];
this.front = 0;
this.rear = 0;
this.size = 0;
}
public boolean isFull() {
return size == capacity;
}
public boolean isEmpty() {
return size == 0;
}
public void enqueue(int data) {
if (isFull()) {
throw new RuntimeException("Queue is full");
}
queue[rear] = data;
rear = (rear + 1) % capacity;
size++;
}
public int dequeue() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
int data = queue[front];
front = (front + 1) % capacity;
size--;
return data;
}
public int peek() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
return queue[front];
}
public int getSize() {
return size;
}
public void displayCircularQueue() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
int i = front;
int count = 0;
while (count < size) {
System.out.print("["+ queue[i] + "]");
i = (i + 1) % capacity;
count++;
}
System.out.println();
}
public int getMiddle() {
if (isEmpty()) {
throw new RuntimeException("Queue is empty");
}
int middleIndex = (front + size / 2) % capacity;
return queue[middleIndex];
}
}
// Main
public class Main {
public static void main(String[] args) {
CircularQueue circularQueue = new CircularQueue(5);
CircularQueue.enqueue(10);
CircularQueue.enqueue(20);
CircularQueue.enqueue(30);
CircularQueue.enqueue(40);
CircularQueue.enqueue(50);
CircularQueue.displayCircularQueue();
System.out.println();
System.out.println("Middle element: " + circularQueue.getMiddle());
circularQueue.displayCircularQueue();
System.out.println();
System.out.println("===DEQUEU===");
System.out.println(circularQueue.dequeue());
circularQueue.enqueue(60);
circularQueue.displayCircularQueue();
System.out.println();
System.out.println("Middle element: " + circularQueue.getMiddle());
circularQueue.displayCircularQueue();
}
}
// === μΆλ ₯ ===
/*
[10][20][30][40][50]
Middle element: 30
[10][20][30][40][50]
===DEQUEU===
10
[20][30][40][50][60]
Middle element: 40
[20][30][40][50][60]
*/
μ μ½λμμ βrearβ λ₯Ό 0μΌλ‘ μ€μ ν¨μΌλ‘μ¨ νμ μΈλ±μ±κ³Ό μν μ²λ¦¬κ° λ¨μν΄μ§κ³ , μ΄ν΄νκΈ° μ¬μμ§λλ€.
μ΄λ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ λμ΄λ λ° λμμ΄ λ©λλ€.