๋ฑ(Deque)
๋ฑ(Deque)
Deque์ด๋?
Deque(Double Ended Queue) ๋ผ๋๋ป์ผ๋ก ์์ชฝ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ ๋ถ ๊ฐ๋ฅํ๋ค.
Deque์ ์ฑ์ง
- ์์์ ์ถ๊ฐ๊ฐ O(1)
- ์์์ ์ ๊ฑฐ๊ฐ O(1)
- ์ ์ผ ์/๋ค์ ์์ ํ์ธ์ด O(1)
- ์ ์ผ ์/๋ค๊ฐ ์๋ ๋๋จธ์ง ์์๋ค์ ํ์ธ/ ๋ณ๊ฒฝ์ด ์์น์ ์ผ๋ก ๋ถ๊ฐ๋ฅ
Deque ๊ตฌํํ๊ธฐ
array๋ก ๊ตฌํํ Queue
head์ tail์ ์์์ ์ ์ค๊ฐ์ผ๋ก ์ค์ ํ๋ค.
class Deque {
private final int MAX = 1000005;
private final int[] data = new int[2 * MAX + 1];
private int head = MAX;
private int tail = MAX;
boolean offerFirst(int e) {
data[--head] = e;
return true;
}
boolean offerLast(int e) {
data[tail++] = e;
return true;
}
int pollFirst() {
return data[head++];
}
int pollLast() {
return data[--tail];
}
int peekFirst() {
return data[head];
}
int peekLast() {
return data[tail - 1];
}
int size() {
return tail - head;
}
boolean isEmpty() {
return size() == 0;
}
}
LinkedList๋ก ๊ตฌํํ Deque
class Deque<E> {
private Node<E> head;
private Node<E> tail;
private int size = 0;
private static class Node<E> {
E data;
Node<E> previous;
Node<E> next;
Node(E data) {
this.data = data;
}
}
boolean offerFirst(E e) {
Node<E> newNode = new Node<>(e);
newNode.next = head;
if (tail == null) {
tail = newNode;
} else {
head.previous = newNode;
}
head = newNode;
size++;
return true;
}
boolean offerLast(E e) {
Node<E> newNode = new Node<>(e);
newNode.previous = tail;
if (head == null) {
head = newNode;
} else {
tail.next = newNode;
}
tail = newNode;
size++;
return true;
}
E pollFirst() {
E e = head.data;
Node<E> nextNode = head.next;
head.data = null;
head.next = null;
head = nextNode;
size--;
if (size == 0) {
tail = null;
head = null;
}
return e;
}
E pollLast() {
E e = tail.data;
Node<E> previousNode = tail.previous;
tail.data = null;
tail.previous = null;
tail = previousNode;
size--;
if (size == 0) {
tail = null;
head = null;
}
return e;
}
E peekFirst() {
Node<E> n = head;
return n == null ? null : n.data;
}
E peekLast() {
Node<E> n = tail;
return n == null ? null : n.data;
}
int size() {
return size;
}
boolean isEmpty() {
return size <= 0;
}
}
java์ Queue์๋ offerFirst, offerLast, pollFirst, pollLast, peekFirst, peekLast ์ธ์๋
addFirst, addLast, remove, removeLast, getFirst, getLast ๋ฑ์ ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
java์ deque interface์ ๋ฉ์๋๋ฅผ ๋น๊ตํ๋ฉด ์๋์ ๊ฐ๋ค.
offer, poll, peek ๊ณ์ด์ ์์ธ๋ฅผ ๋์ง์ง์๊ณ
add, remove, get, element ๊ณ์ด์ ์์ธ๊ฐ ๋ฐ์ํ๋ค.