큐 (Queue)
1. 큐 구조
- 줄을 서는 행위와 유사
- 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
- 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일
- FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는 순서과 반대
Input | Output | |||||||
8 | 5 | 4 |
Input | Output | |||||||
8 | 5 | 4 |
Input | Output | |||||||
8 | 5 |
Input | Output | |||||||
8 |
2. 알아둘 용어
Enqueue: 큐에 데이터를 넣는 기능
Dequeue: 큐에서 데이터를 꺼내는 기능
3. 파생 종류
LifoQueue (Last-In, First-Out)
PriorityQueue (우선순위 큐)
4. JAVA 큐 라이브러리
import java.util.LinkedList;
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.Collections;
Queue<Integer> integerQueue = new LinkedList<>();
Queue<String> stringQueue = new LinkedList<>();
// 낮은 숫자 우선 순위 큐
PriorityQueue<Integer> priorityQueueLowest = new PriorityQueue<>();
// 높은 숫자 우선 순위 큐
PriorityQueue<Integer> priorityQueueHighest = new PriorityQueue<>(Collections.reverseOrder());
값 추가, 삭제, 출력
Queue<Integer> stack = new LinkedList<>();
queue.add(1); // queue에 값 1 추가
queue.offer(2); // queue에 값 2 추가
queue.poll(); // queue에 첫번째 값을 반환하고 제거 비어있다면 null
queue.remove(); // queue에 첫번째 값 제거
queue.clear(); // queue 초기화
queue.offer(1); // queue에 값 1 추가
queue.offer(2); // queue에 값 2 추가
queue.peek(); // queue의 첫번째 값 출력
queue.size(); // queue의 크기 출력
어디에 큐가 많이 쓰일까?
멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨
큐의 경우에는 장단점 보다는 (특별히 언급되는 장단점이 없음), 큐의 활용 예로 프로세스 스케쥴링 방식을 함께 이해해두는 것이 좋음