데이터를 일시적으로 저장하고 처리하기 위한 추상 자료형(Abstract Data Type) 중 하나
First In First Out (FIFO) 방식으로 동작 → 가장 먼저 삽입된 데이터가 가장 먼저 삭제되는 구조
선형 구조로 이루어져 있으며, 가장 앞쪽은 front, 가장 뒤쪽을 rear라고 함
큐에 데이터를 삽입하는 연산을 enqueue, 큐에서 데이터를 삭제하는 연산을 dequeue라고 함
FIFO(First In First Out) 구조
데이터의 순서가 중요한 애플리케이션에서 사용하기 적합함
데이터 삽입/삭제 연산이 빠름
삽입연산은 뒤쪽에서, 삭제 연산은 앞쪽에서 수행함
삽입/삭제 연산의 시간 복잡도가 O(1)로 매우 빠름
자료구조의 구현이 쉬움
크기에 제한이 있음
자료구조의 크기가 고정되어 있기 때문에 크기를 초과라는 데이터를 삽입 불가
중간에 위치한 데이터에 접근이 어려움
큐의 중간에 위치한 데이터에 접근하기 위해서는 큐의 모든 데이터를 순서대로 탐색해야함. 이는 시간 복잡도가 O(n)으로 매우 느려질 수 있음
Queue
와 마찬가지로 FIFO(First-In-First-Out) 구조를 가지고 있음import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
// 덱 생성
Deque<String> deque = new ArrayDeque<String>();
// 데이터 추가
deque.addFirst("apple");
deque.addLast("banana");
deque.offerFirst("cherry");
// 데이터 삭제
String removedFirst = deque.removeFirst();
String removedLast = deque.removeLast();
System.out.println("Removed first element: " + removedFirst);
System.out.println("Removed last element: " + removedLast);
// 덱 출력
System.out.println("Deque: " + deque);
// 다음에 삭제될 요소 확인
String peekedFirst = deque.peekFirst();
String peekedLast = deque.peekLast();
System.out.println("Next first element: " + peekedFirst);
System.out.println("Next last element: " + peekedLast);
// 덱의 크기 확인
int size = deque.size();
System.out.println("Size of deque: " + size);
}
}
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// 큐 생성
Queue<String> queue = new LinkedList<String>();
// 데이터 추가
queue.add("apple");
queue.add("banana");
queue.add("cherry");
// 데이터 삭제
String removed = queue.remove();
System.out.println("Removed element: " + removed);
// 큐 출력
System.out.println("Queue: " + queue);
// 다음에 삭제될 요소 확인
String peeked = queue.peek();
System.out.println("Next element: " + peeked);
// 큐의 크기 확인
int size = queue.size();
System.out.println("Size of queue: " + size);
}
}
참고
https://leejinseop.tistory.com/36
https://galid1.tistory.com/483