정의 : Queue란 컴퓨터의 기본 자료구조 중 하나로 먼저 들어온 데이터가 먼저 나가는 구조로 되어 있는 FIFO(First In First Out) 형식의 자료구조 이다.
가장 최근 들어온 자료가 가장 먼저 나가는 FIFO(First-In First-Out) 선입선출 형태를 갖는다.
Queue는 한쪽에서는 데이터가 추가되고 한쪽에서는 데이터가 삭제되는 구조를 가지고 있다.
Queue의 용어
장점
단점
크기가 제한적이다.
중간에 위치한 데이터에 대한 접근이 불가능 하다.
Queue의 종류
Linear Queue(선형 큐)
Circular Queue (원형 큐)
(index+1) % 배열의 사이즈
를 통해 0으로 순환되는 구조를 가진다.Priority Queue (우선순위 큐)
Queue는 주로 데이터가 입력된 순서대로 데이터를 처리해야할 상황에 사용이 되어진다.
콜센터 고객 대기 시간
우선순위가 동일한 작업 예약 (프린터 인쇄 대기)
캐시(Cache) 구현
선입선출이 필요한 대기열 (티켓 카운터)
너비 우선 탐색(BFS, Breadth-First Search) 구현
Queue의 구현 방법
배열(Array) 을 이용해 구현
연결리스트(LinkedList) 를 이용해 구현
선언
import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>();
Queue<String> queue = new LinkedList<>();
Queue는 LinkedList를 통해 선언이 가능하다
주요 메소드
메소드 | 설명 |
---|---|
add(Object item) | 해당 큐의 맨 뒤에 전달된 요소를 삽입, (성공시 true를 반환, 큐가 full일 경우 IllegalStateException을 발생) |
element() | 해당 큐의 맨 앞에 있는 요소를 반환 |
offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 |
peek() | 해당 큐의 맨 앞에 있는 요소를 반환. Empty일 경우 null을 반환 |
poll() | 해당 큐의 맨 앞에 있는 요소를 반환하고, 해당 요소를 큐에서 제거, Empty일 경우 null을 반환 |
remove() | 해당 큐의 맨 앞에 있는 요소를 제거 |
LinearQueue
add : O(1)
poll : O(1)
peek : O(1)
remove : O(n)
PriorityQueue
add() : O(log n)
poll() : O(log n)
peek() : O(1)