Priority Queue (우선순위 큐)
- 우선순위가 높은 데이터가 먼저 나옴
- 모든 데이터에 우선순위가 있음
- Dequeue 시 , 우선수위가 높은 순으로 나감
- 우선 순위가 같은 경우는 FIFO
- 최소 힙 및 최대 힙의 삽입 삭제가 같다
- 배열, LinkedList, Heap 으로 구현 가능
시간 복잡도 비교
// 비선형 자료구조 - 우선순위 큐
// 연결 리스트를 이용한 우선순위 큐
// 자바 기본 PriorityQueue
import java.util.*;
public class Main {
public static void enqueue(LinkedList<Integer> list, int data) {
int idx = list.size();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > data){
idx = i;
break;
}
}
list.add(idx, data);
}
public static Integer dequeue(LinkedList<Integer> list) {
if (list.size() == 0){
return null;
}
int data = list.get(0);
list.remove(0);
return data;
}
public static void main(String[] args) {
// 연결리스트를 이용한 우선순위 큐
System.out.println("== 연결리스트 방식의 우선순위 큐 ==");
LinkedList<Integer> pqList = new LinkedList();
enqueue(pqList, 5);
enqueue(pqList, 7);
enqueue(pqList, 3);
enqueue(pqList, 1);
enqueue(pqList, 9);
System.out.println(pqList);
System.out.println(dequeue(pqList));
System.out.println(dequeue(pqList));
System.out.println(pqList);
System.out.println();
// 자바 기본 PriorityQueue 사용
System.out.println("== 자바 기본 우선순위 큐 ==");
// 우선순위: 낮은 숫자 순
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(7);
pq.add(3);
pq.add(1);
pq.add(9);
System.out.println(Arrays.toString(pq.toArray()));
// 우선순위: 높은 숫자 순
PriorityQueue<Integer> pq2 = new PriorityQueue<>(Collections.reverseOrder());
pq2.add(5);
pq2.add(7);
pq2.add(3);
pq2.add(1);
pq2.add(9);
System.out.println(Arrays.toString(pq2.toArray()));
}
}
'Study for Backend > Data Structure' 카테고리의 다른 글
[Data Structure 기초 연습] 우선순위 큐 - 오름차순 정렬 02 (0) | 2024.03.15 |
---|---|
[Data Structure 기초 연습] 우선순위 큐 - 오름차순 정렬 01 (0) | 2024.03.15 |
[Data structure 기초 연습] ArrayList로 최소/최대 힙 구현 (0) | 2024.03.15 |
[Data Structure 기초] 그래프와 트리의 차이 (0) | 2024.03.14 |
[Data Structure 기초] 그래프 (0) | 2024.03.14 |