1οΈβ£ μν ν(Circular Queue).
μν ν(Circular Queue)λ, βκ³ μ λ ν¬κΈ°μ λ°°μ΄β μ μ¬μ©νμ¬ κ΅¬νλ νλ‘μ, λ°°μ΄μ λμ λλ¬νλ©΄ λ€μ λ°°μ΄μ μμ λΆλΆμΌλ‘ λμκ°λ ꡬ쑰λ₯Ό κ°μ§ νμ λλ€.
μ΄λ₯Ό ν΅ν΄ νκ° κ½ μ°¨ μλμ§, λΉμ΄ μλμ§λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμΌλ©°, 곡κ°μ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
1οΈβ£ μν νμ νΉμ§.
-
- μ μ μ μΆ(FIFO, First In First Out) : μΌλ°μ μΈ νμ λ§μ°¬κ°μ§λ‘ λ¨Όμ λ€μ΄κ° λ°μ΄ν°κ° λ¨Όμ λμ€λ ꡬ쑰μ λλ€.
-
- μν ꡬ쑰 : λ°°μ΄μ λμ λλ¬νλ©΄ λ€μ μ²μμΌλ‘ λμκ°λλ€. μ΄λ₯Ό ν΅ν΄ κ³ μ λ ν¬κΈ°μ λ°°μ΄μ μ΄μ©νμ¬ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν©λλ€.
- 3 κ³ μ ν¬κΈ° : νμ μ΅λ ν¬κΈ°λ λ°°μ΄μ ν¬κΈ°λ‘ μ ν λ©λλ€.
2οΈβ£ μν νμ μ£Όμ μ°μ°.
-
- Enqueue : νμ λ€μͺ½(rear)μ μλ‘μ΄ μμλ₯Ό μΆκ°ν©λλ€.
-
- Dequeue : νμ μμͺ½(front)μμ μμλ₯Ό μ κ±°νκ³ λ°νν©λλ€.
-
- Peek : νμ μμͺ½(front) μμλ₯Ό μ κ±°νμ§ μκ³ λ°νν©λλ€.
-
- IsEmpty : νκ° λΉμ΄ μλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
-
- IsFull : νκ° κ°λ μ°Όλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
3οΈβ£ μν νμ μ₯μ .
- λ©λͺ¨λ¦¬ ν¨μ¨μ± : κ³ μ λ ν¬κΈ°μ λ°°μ΄μ μ¬μ©νμ¬ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν©λλ€.
- μ°μλ λ©λͺ¨λ¦¬ μ¬μ© : λ°°μ΄μ μ¬μ©νμ¬ λ©λͺ¨λ¦¬λ₯Ό μ°μμ μΌλ‘ μ¬μ©νλ―λ‘ μΊμ ν¨μ¨μ±μ΄ λμ΅λλ€.
4οΈβ£ μν νμ λ¨μ .
- κ³ μ ν¬κΈ° μ ν : ν¬κΈ°κ° κ³ μ λμ΄ μμΌλ―λ‘, νκ° κ°λ μ°¬ κ²½μ° λ μ΄μ μμλ₯Ό μΆκ°ν μ μμ΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ λμ μΌλ‘ ν¬κΈ°λ₯Ό μ‘°μ ν μ μλ λ°©λ²μ μΆκ°λ‘ ꡬνν΄μΌ ν©λλ€.
5οΈβ£ μν νμ ꡬν μμ
// CircularQueue
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;
queue = new int[capacity];
front = 0;
rear = -1;
size = 0;
}
// νμ μμ μΆκ°
public void enqueue(int element) {
if (isFull()) {
System.out.println("Queue is full");
return;
}
rear = (rear + 1) % capacity;
queue[rear] = element;
size++;
}
// νμμ μμ μ κ±° λ° λ°ν
public int dequeue() {
if (isEmpty()) {
System.out.println("Queue is empty");
return -1;
}
int element = queue[front];
front = (front + 1) % capacity;
size--;
return element;
}
// νμ μμͺ½ μμ λ°ν
public int peek() {
if (isEmpty()) {
System.out.println("Queue is empty");
return -1;
}
return queue[front];
}
// νκ° λΉμ΄ μλμ§ νμΈ
public boolean isEmpty() {
return size == 0;
}
// νκ° κ°λ μ°Όλμ§ νμΈ
public boolean isFull() {
return size == capacity;
}
// νμ ν¬κΈ° λ°ν
public int getSize() {
return size;
}
}
// Main
public class Main {
public static void main(String[] args) {
CircularQueue circularQueue = new CircularQueue(5);
circularQueue.enqueue(1);
circularQueue.enqueue(2);
circularQueue.enqueue(3);
circularQueue.enqueue(4);
circularQueue.enqueue(5);
System.out.println("Dequeue: " + circularQueue.dequeue());
System.out.println("Dequeue: " + circularQueue.dequeue());
circularQueue.enqueue(6);
circularQueue.enqueue(7);
System.out.println("Peek: " + circularQueue.peek());
while (!circularQueue.isEmpty()) {
System.out.println("Dequeue: " + circularQueue.dequeue());
}
}
}
// μΆλ ₯
/*
Dequeue: 1
Dequeue: 2
Peek: 3
Dequeue: 3
Dequeue: 4
Dequeue: 5
Dequeue: 6
Dequeue: 7
*/
μ½λ μ€λͺ .
-
-
CircularQueue ν΄λμ€:
-
β
queue
β : νλ₯Ό μ μ₯νλ λ°°μ΄. -
β
front
β : νμ μμͺ½ μΈλ±μ€. -
β
rear
β : νμ λ€μͺ½ μΈλ±μ€. -
β
size
β : νμ¬ νμ μ μ₯λ μμμ κ°μ. -
β
capacity
β : νμ μ΅λ ν¬κΈ°.
-
β
-
CircularQueue ν΄λμ€:
-
-
λ©μλ:
-
β
enqueue(int element)
β : νκ° κ°λ μ°¨μ§ μμμΌλ©΄ μμλ₯Ό νμ μΆκ°ν©λλ€. -
β
dequeue()
β : νκ° λΉμ΄ μμ§ μμΌλ©΄ νμ μμͺ½ μμλ₯Ό μ κ±°νκ³ λ°νν©λλ€. -
β
peek()
β : νμ μμͺ½ μμλ₯Ό μ κ±°νμ§ μκ³ λ°νν©λλ€. -
β
isEmpty()
β : νκ° λΉμ΄ μλμ§ νμΈν©λλ€. -
β
isFull()
β : νκ° κ°λ μ°Όλμ§ νμΈν©λλ€. -
β
getSize()
β : νμ νμ¬ ν¬κΈ°λ₯Ό λ°νν©λλ€.
-
β
-
λ©μλ:
-
-
main λ©μλ:
- μν νλ₯Ό μμ±νκ³ μ¬λ¬ μ°μ°μ μννμ¬ νμ λμμ ν μ€νΈν©λλ€.
-
main λ©μλ: