ํ(Queue)
ํ(Queue)
Queue๋?
ํ์ชฝ ๋์์ ์์๋ฅผ ๋ฃ๊ณ ๋ฐ๋์ชฝ ๋์์ ์์๋ฅผ ๋บ ์ ์๋ ์๋ฃ๊ตฌ์กฐ(FIFO).
Queue์ ์ฑ์ง
- ์์์ ์ถ๊ฐ๊ฐ O(1)
- ์์์ ์ ๊ฑฐ๊ฐ O(1)
- ์ ์ผ ์/๋ค์ ์์ ํ์ธ์ด O(1)
- ์ ์ผ ์/๋ค๊ฐ ์๋ ๋๋จธ์ง ์์๋ค์ ํ์ธ/ ๋ณ๊ฒฝ์ด ์์น์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
Queue ๊ตฌํํ๊ธฐ
array๋ก ๊ตฌํํ Queue
class Queue {
private final int MAX = 100005;
private final int[] data = new int[MAX];
private int head = 0, tail = 0;
boolean offer(int e) {
data[tail] = e;
tail++;
return true;
}
int poll() {
return data[head++];
}
int peek() {
return data[head];
}
int size() {
return tail - head;
}
boolean isEmpty() {
return size() == 0;
}
}
LinkedList๋ก ๊ตฌํํ Queue
class Queue<E> {
private Node<E> head;
private Node<E> tail;
private int size = 0;
private static class Node<E> {
E data;
Node<E> next;
Node(E data) {
this.data = data;
}
}
boolean offer(E e) {
Node<E> newNode = new Node<>(e);
if (head == null) {
head = newNode;
} else {
tail.next = newNode;
}
tail = newNode;
size++;
return true;
}
E poll() {
if (size == 0) return null;
E e = head.data;
Node<E> nextNode = head.next;
head.data = null;
head.next = null;
head = nextNode;
size--;
return e;
}
E peek() {
return head.data;
}
int size() {
return size;
}
boolean isEmpty() {
return size == 0;
}
}
java์ Queue์๋ offer, poll, peek ์ธ์๋ add, remove, element ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
java์ queue interface์ ๋ฉ์๋๋ฅผ ๋น๊ตํ๋ฉด ์๋์ ๊ฐ๋ค.
ย | ์์ธ๋ฐ์ | ๊ฐ ๋ฆฌํด |
---|---|---|
์ถ๊ฐ(enqueue) | add(e) | offer(e) |
์ญ์ (dequeue) | remove() | poll() |
๊ฒ์ฌ(peek) | element() | peek() |
์ฐจ์ด๋ ์์ธ๊ฐ ๋ฐ์ํ๋์ง ์ํ๋์ง ์ฌ๋ถ์ด๋ค.