Queue (ํ)
๐ ๋ชฉ์ฐจ
โ Queue ๋ โ
Queue ์ฃผ์ ๋์
Queue์ ์ฌ์ฉ ์ฌ๋ก
Queue์ ์ข ๋ฅ
Queue ๊ตฌํ
โ Queue ๋ โ
ํ(Queue)๋ ๋จผ์ ์ง์ด ๋ฃ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ FIFO(First In First Out), ์ ์ ์ ์ถ ๋ฐฉ์์ ๋๋ค. ์ ์ ์ ์ถ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ๋ํ๋ด๋ Front์ ๋ค์ชฝ์ ๋ํ๋ด๋ Rear๊ฐ ์์ต๋๋ค.
๋์ค์ ์ง์ด ๋ฃ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์คํ(stack)๊ณผ๋ ๋ฐ๋๋๋ ๊ฐ๋ ์ ๋๋ค.
๐ถ Queue ์ฃผ์ ๋์
- enQueue( ) : ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ณผ์ , Rear๊ฐ ์ปค์ง๋ค. Push๋ก ๋ง๋ค ์๋ ์์ง๋ง ์คํ๊ณผ ํผ๋์ด ์๊ธธ ์๋ ์์ผ๋ฏ๋ก ์ง์ํ๋ค.
- deQueue( ) : ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ ๊ณผ์ , Front๊ฐ ์ปค์ง๋ค. Pop์ผ๋ก ๋ง๋ค ์๋ ์์ง๋ง ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ง์ํ๋ค.
- isEmpty( ) : ํ๊ฐ ๋น์ด์๋์ง ํ์ธํ๋ค.
- isFull( ) : ํ๊ฐ ๊ฝ ์ฐจ ์๋์ง ํ์ธํ๋ค.
- peek( ) : ์์ ์๋ ์์๋ฅผ ์ญ์ ํ์ง ์๊ณ ๋ฐํํ๋ค.
๐ถ Queue์ ์ฌ์ฉ ์ฌ๋ก
๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ์๊ฐ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ์ํฉ์ ์ด์ฉํ๋ค.
- ๋๋น ์ฐ์ ํ์ (BFS, Breath-First Search) ๊ตฌํ
- ์ฒ๋ฆฌํด์ผ ํ ๋ ธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก ํ(Queue) ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ ธ๋๋ฅผ ํ๋ ์ฒ๋ฆฌํ ๋๋ง๋ค ํด๋น ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค์ ํ(Queue)์ ๋ค์ ์ ์ฅํ๋ค.
- ๋ ธ๋๋ฅผ ์ ๊ทผํ ์์๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์บ์ (Cache) ๊ตฌํ
- ์ฐ์ ์์๊ฐ ๊ฐ์ ์์ ์์ฝ (์ธ์ ๋๊ธฐ์ด)
- ์ ์ ์ ์ถ์ด ํ์ํ ๋๊ธฐ์ด ( ํฐ์ผ ์นด์ดํฐ)
- ์ฝ์ผํฐ ๊ณ ๊ฐ ๋๊ธฐ์๊ฐ
- ํ๋ฆฐํฐ์ ์ถ๋ ฅ ์ฒ๋ฆฌ
- ์๋ ์์คํ ์ ๋ฉ์์ง ์ฒ๋ฆฌ๊ธฐ
- ํ๋ก์ธ์ค ๊ด๋ฆฌ
๐ถ Queue์ ์ข ๋ฅ
- ์ ํ ํ : 1์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ ํ ( ํ์ ํฌ๊ธฐ๊ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋๋ ๊ตฌ์กฐ ), front์ rear์ ์ด์ฉํ์ฌ ๊ณต๋ฐฑ๊ณผ ํฌํ ์ํ๋ฅผ ํ๋จํ ์ ์๋ค.
- front = rear ์ธ ๊ฒฝ์ฐ ๊ณต๋ฐฑ ์ํ์ด๋ค.
- rear = n - 1 ( n์ ๋ฐฐ์ดํฌํค์ด๋ค.)
- ์ํ ํ : ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ผ๊ธฐ ์ํด ์ด๋ก ์ ์ผ๋ก ์ํ์ ์ธ ํ (๋ฐฐ์ด์ ์ฒ์๊ณผ ๋์ด ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ )๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ
- ๊ณต๋ฐฑ๊ณผ ํฌํ ์ํ ๊ตฌ๋ถ์ ์ํด front๊ฐ ์๋ ์๋ฆฌ๋ ์ฌ์ฉํ์ง ์๊ณ ๋น์๋ฆฌ๋ก ๋๋ค.
- front๊ฐ ์๋ ์๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ๋น์ด ์๋ค๊ณ ์๊ฐํ๋ค.
- rear๊ฐ ๋ง์ง๋ง ๋ถ๋ถ์ ์๋ค๋ฉด mod์ฐ์ฐ์ ์ด์ฉํ์ฌ ์์ผ๋ก ๋ณด๋ธ๋ค. (Index์ ์ํ)
- front์ rear๊ฐ ๊ฐ๋ค๋ฉด ๊ณต๋ฐฑ ์ํ์ด๋ค.
- rear์ ๋ค์ ์นธ์ด front๋ผ๋ฉด full ์ํ์ด๋ค.
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)๋ฅผ ์ด์ฉํ ํ : ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ํ์ฒ๋ผ ์ด์ฉํ๋ค.
- front๋ ์ฒซ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค. rear๋ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๊ฐ๊ฐ์ ๋ ธ๋๋ ํ์ ์์์ด๋ค.
- ์ด๊ธฐ ํน์ ๊ณต๋ฐฑ ์ํ๋ front์ rear๊ฐ null์ด๋ค.
- front์ rear๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.(ํฌ์ธํฐ)
- ๋น ๊ณต๊ฐ์ด ์๊ธฐ์ง ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ ์ ์๋ค.
- ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก๋ ์๊ฐ, ๊ตฌํ ๋์ด๋๊ฐ ์๋ค.
๐ถ Queue ๊ตฌํ
public class MyQueue {
private static class QueueNode {
private T data;
private QueueNode next;
public QueueNode(T data) {
this.data = data;
}
}
private QueueNode first;
private QueueNode last;
public void add(T item) {
QueueNode t = new QueueNode(item);
if (last != null) last.next = t;
last = t;
if (first == null) first = last;
}
public T remove() {
if (first == null) throw new NoSuchElementException();
T data = first.data;
first = first.next;
if (first == null) last = null;
return data;
}
public T peek() {
if (first == null) throw new NoSuchElementException();
return first.data;
}
public boolean isEmpty() {
return first == null;
}
}
reference
https://gmlwjd9405.github.io/2018/08/02/data-structure-queue.html
[์๋ฃ๊ตฌ์กฐ] ํ(Queue)๋ - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://mungto.tistory.com/169
ํ(Queue)๋ ๋ฌด์์ธ๊ฐ?
์ถ์ฒ : https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg SW Expert Academy SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ..
mungto.tistory.com
https://galid1.tistory.com/483
์๋ฃ๊ตฌ์กฐ - ํ(Queue)๋?
Queue๋ Queue๋ - ํ๋ ํ์ชฝ ๋(rear) ์์๋ ์ฝ์ ์ฐ์ฐ๋ง ์ด๋ฃจ์ด์ง๋ฉฐ ๋ค๋ฅธ ํ์ชฝ ๋(front) ์์๋ ์ญ์ ์ฐ์ฐ๋ง ์ด๋ฃจ์ด์ง๋ ์ ํ ์์ ๋ฆฌ์คํธ ์ด๋ค. ํน์ฑ - ๊ตฌ์กฐ์ ๋จผ์ ์ฝ์ ๋ item ์ด ๋จผ์ ์ญ์ ๊ฐ ์ด๋ฃจ
galid1.tistory.com