1οΈβ£ ν(Queue).
ν(Queue)λ μ ν μλ£κ΅¬μ‘° μ€ νλλ‘, λ°μ΄ν°κ° λ€μ΄μ¨ μμλλ‘ μ²λ¦¬λλ μ μ μ μΆ(FIFO, First In First Out) ꡬ쑰λ₯Ό κ°μ§λλ€.
1οΈβ£ ν(Queue).
ν(Queue)λ κ°μ₯ λ¨Όμ μ½μ λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ μ κ±°λ©λλ€.
2οΈβ£ ν(Queue)μ μ°μ°.
- Enqueue : νμ λ€(rear) λμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°μ λλ€.
-
Dequeue : νμ μ(front) λμμ λ°μ΄ν°λ₯Ό μ κ±°νκ³ λ°ννλ μ°μ°μ λλ€.
-
front λλ Peek : νμ μ λμ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ λ°ννλ μ°μ°.
-
isEmpty : νκ° λΉμ΄ μλμ§ νμΈνλ μ°μ°.
-
Size : νμ μ μ₯λ λ°μ΄ν°μ κ°μλ₯Ό λ°ννλ μ°μ°.
3οΈβ£ ν(Queue)μ μ€μ μμ© μ¬λ‘.
- νλ¦°ν° μμ λκΈ°μ΄.
- CPU μμ μ€μΌμ€λ§.
- BFS(Breath-First Search, λλΉ μ°μ νμ)
νλ λ°°μ΄μ΄λ μ°κ²° 리μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬νν . μμμ΅λλ€.
4οΈβ£ νμ μκ° λ³΅μ‘λ.
νμ κ° μ°μ°μ λ€μκ³Ό κ°μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λλ€.
-
Enqueue : O(1)
- νμ λ€ λμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°μ νμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Dequeue : O(1)
- νμ μ λμμ λ°μ΄ν°λ₯Ό μ κ±°νλ μ°μ°λ νμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Front λλ Peek : O(1)
- νμ μ λμ μλ λ°μ΄ν°λ₯Ό νμΈνλ μ°μ°μ λ°μ΄ν° μ κ·Όλ§ νμνκΈ° λλ¬Έμ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
isEmpty : O(1)
- νκ° λΉμ΄ μλμ§ νμΈνλ μ°μ°μ νμ ν¬κΈ°λ§ νμΈνλ©΄ λλ―λ‘ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
-
Size : O(1)
- νμ νμ¬ μ μ₯λ λ°μ΄ν°μ κ°μλ₯Ό λ°ννλ μ°μ°λ μΌμ ν μκ° λ΄μ μλ£λ©λλ€.
5οΈβ£ νμ ꡬν
- λ°°μ΄μ μ΄μ©ν νλ κ³ μ λ ν¬κΈ°λ₯Ό κ°μ§λ©°, μν ν(Circular Queue)λ‘ κ΅¬ννμ¬ λ°°μ΄μ λμμ μμμΌλ‘ μνν μ μλλ‘ ν©λλ€.
λ°°μ΄μ μ΄μ©ν ν ꡬν.
// ArrayQueue
public class ArrayQueue {
private int maxSize; // νμ μ΅λ ν¬κΈ°
private int front; // νμ μ λμ κ°λ¦¬ν€λ μΈλ±μ€
private int rear; // νμ λ€ λμ κ°λ¦¬ν€λ μΈλ±μ€
private int[] queueArray; // νλ₯Ό μ μ₯ν λ°°μ΄
private int nItems; // νμ μ μ₯λ λ°μ΄ν°μ κ°μ
// μμ±μ
public ArrayQueue(int size) {
maxSize = size;
queueArray = new int[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
// νμ κ°μ Enqueueνλ λ©μλ.
public void enqueue(int value) {
if (isFull()) {
System.out.println("νκ° κ°λ μ°Όμ΅λλ€.");
return;
}
if (rear == maxSize - 1) {
rear = -1; // μν ν μ²λ¦¬
}
queueArray[++rear] = value;
nItems++;
}
// νμμ κ°μ dequeueνλ λ©μλ.
public int dequeue() {
if (isEmpty()) {
System.out.println("νκ° λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν.
}
int temp = queueArray[front++];
if (front == maxSize) {
front = 0; // μν ν μ²λ¦¬.
}
nItems--;
return temp;
}
// νμ μ λ κ°μ λ°ννλ λ©μλ
public int peekFront() {
if (isEmpty()) {
System.out.println("νκ° λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν.
}
return queueArray[front];
}
// νκ° λΉμ΄μλμ§ νμΈνλ λ©μλ.
public boolean isEmpty() {
return (nItems == 0);
}
// νκ° κ°λ μ°Όλμ§ νμΈνλ λ©μλ.
public boolean isFull() {
return (nItems == maxSize);
}
// νμ ν¬κΈ°λ₯Ό λ°ννλ λ©μλ.
public int size() {
return nItems;
}
}
// Main
public class Main {
public static void main(String[] args) {
ArrayQueue queue = new ArrayQueue(5); // ν¬κΈ°κ° 5μΈ ν μμ±.
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
System.out.println("=== μΆλ ₯ ===");
System.out.println();
System.out.println("Queueμ μ λ κ°: " + queue.peekFront());
System.out.println("Queueμ ν¬κΈ°: " + queue.size());
// while λ¬Έμ 쑰건μ queueκ° λΉμ΄μμ κ²½μ° false μ΄λ―λ‘ μννμ§ μμ΅λλ€.
// κ·Έλ¬λ queueκ° λΉμ΄μμ§ μμ κ²½μ° trueκ° λλ―λ‘ while λΈλ‘μ λ€μ΄κ° queueκ° λΉμ΄μμ λκΉμ§(!queue.isEmpty()) λμν©λλ€.
while (!queue.isEmpty()) {
System.out.println("Dequeue : " + queue.dequeue());
}
System.out.println("Queueμ ν¬κΈ° : " + queue.size());
}
}
/*
=== μΆλ ₯ ===
Queueμ μ λ κ°: 1
Queueμ ν¬κΈ°: 5
Dequeue : 1
Dequeue : 2
Dequeue : 3
Dequeue : 4
Dequeue : 5
Queueμ ν¬κΈ° : 0
*/
7οΈβ£ ν(Queue) κΈ°λ³Έ ꡬ쑰.
ν(Queue)λ μ ν μλ£κ΅¬μ‘° μ€ νλλ‘, λ°μ΄ν°λ₯Ό μ μ μ μΆ(FIFO, First In First Out) λ°©μμΌλ‘ μ²λ¦¬ν©λλ€.
π 1οΈβ£ νμ κΈ°λ³Έ κ΅¬μ± μμ.
-
Front : νμ κ°μ₯ μμͺ½μ κ°λ¦¬ν€λ ν¬μΈν° μ λλ€. Dequeue μ°μ°μ΄ λ°μν λ λ°μ΄ν°λ₯Ό μ κ±°νλ μμΉλ₯Ό λνλ λλ€.
-
Rear : νμ κ°μ₯ λ€μͺ½μ 카리ν€λ ν¬μΈν° μ λλ€. Enqueue μ°μ°μ΄ λ°μν λ λ°μ΄ν°λ₯Ό μΆκ°νλ μμΉλ₯Ό λνλ λλ€.
-
Queue Array(λλ List) : νμ λ°μ΄ν°λ₯Ό μ μ₯νλ μλ£κ΅¬μ‘°. λ°°μ΄μ΄λ μ°κ²° 리μ€νΈλ₯Ό μ¬μ©ν μ μμ΅λλ€.
π 2οΈβ£ μ°κ²° 리μ€νΈλ₯Ό μ΄μ©ν νμ ꡬν λ°©λ².
- μ°κ²° 리μ€νΈλ₯Ό μ΄μ©ν νλ λμ μΌλ‘ ν¬κΈ°λ₯Ό μ‘°μ ν μ μμΌλ©°, κ° λ Έλκ° λ°μ΄ν°μ λ€μ λ Έλλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό ν¬ν¨ν©λλ€.
// LinkedListQueue
public class LinkedListQueue {
private class Node {
int data;
Node next;
Node(int data) {
this.data = data;
}
}
private Node front; // νμ μμͺ½ λ
Έλ.
private Node rear; // νμ λ€μͺ½ λ
Έλ.
private int size; // νμ μ μ₯λ λ°μ΄ν°μ κ°μ.
// μμ±μ
public LinkedListQueue() {
front = null;
rear = null;
size = 0;
}
// νμ κ°μ μΆκ°νλ λ©μλ.
public void enqueue(int value) {
Node newNode = new Node(value);
if (isEmpty()) {
front = newNode;
} else {
rear.next = newNode;
}
rear = newNode;
size++;
}
// νμμ κ°μ μ κ±°νκ³ λ°ννλ λ©μλ.
public int dequeue() {
if (isEmpty()) {
System.out.println("νκ° λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν.
}
int value = front.data;
front = front.next;
if (front == null) {
rear = null;
}
size--;
return value;
}
// νμ μμͺ½ κ°μ λ°ννλ λ©μλ.
public int peekFront() {
if (isEmpty()) {
System.out.println("νκ° λΉμ΄μμ΅λλ€.");
return -1; // μλ¬λ₯Ό λνλ΄κΈ° μν΄ -1 λ°ν.
}
return front.data;
}
// νκ° λΉμ΄μλμ§ νμΈνλ λ©μλ.
public boolean isEmpty() {
return (front == null);
}
// νμ ν¬κΈ°λ₯Ό λ°ννλ λ©μλ.
public int size() {
return size;
}
}
// Main
public class Main {
public static void main(String[] args) {
LinkedListQueue queue = new LinkedListQueue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
System.out.println("=== μΆλ ₯ ===");
System.out.println();
System.out.println("Queueμ μ λ κ° : " + queue.peekFront());
System.out.println("Queueμ ν¬κΈ° : " + queue.size());
// while λ¬Έμ 쑰건μ queueκ° λΉμ΄μμ κ²½μ° false μ΄λ―λ‘ μννμ§ μμ΅λλ€.
// κ·Έλ¬λ queueκ° λΉμ΄μμ§ μμ κ²½μ° trueκ° λλ―λ‘ while λΈλ‘μ λ€μ΄κ° queueκ° λΉμ΄μμ λκΉμ§(!queue.isEmpty()) λμν©λλ€.
while (!queue.isEmpty()) {
System.out.println("Dequeue : " + queue.dequeue());
}
System.out.println("Queueμ ν¬κΈ° : " + queue.size());
}
}
/*
=== μΆλ ₯ ===
Queueμ μ λ κ°: 1
Queueμ ν¬κΈ°: 5
Dequeue : 1
Dequeue : 2
Dequeue : 3
Dequeue : 4
Dequeue : 5
Queueμ ν¬κΈ° : 0
*/
μ΄μ κ°μ΄ νλ μ°κ²° 리μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€.
νλ₯Ό λ°°μ΄ λλ μ°κ²° 리μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬ννμ λ κ°κ°μ μ₯λ¨μ .
λ°°μ΄ κΈ°λ° νλ κ°λ¨νκ³ λΉ λ₯΄μ§λ§ κ³ μ λ ν¬κΈ° λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν©λλ€.
μ°κ²° 리μ€νΈ κΈ°λ° νλ λμ μΌλ‘ ν¬κΈ°λ₯Ό μ‘°μ ν μ μμ§λ§ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ λ λ§μ μ μμ΅λλ€.