스택(stack)은 삽입과 삭제 연산이 후입 선출(LIFO:Last-in First-out)로 이뤄지는 자료구조이다.
위치
연산
스택은 깊이 우선 탐색(DFS, Depth First Search), 백트래킹 종류의 코딩 테스트에 사용
큐(queue)는 삽입과 삭제 연산이 선입 선출(FIFO : First-in First-out)로 이뤄지는 자료구조이다.
위치
연산
큐는 너비 우선 탐색(BFS, Breadth First Search)에서 자주 사용
완전 이진 트리
부모의 값은 항상 자식(들)의 값보다 크거나(Max heap 최대 힙), 작아야(Min heap 최소 힙)한다. 루트노드에는 항상 데이터들 중 가장 큰 값(혹은 가장 작은 값)이 저장되어 있기 때문에, 최댓값(혹은 최솟값)을 O(1)안에 찾을 수 있다. 데이터의 삽입과 삭제는 모두 O(logN)이 소요된다.
인덱스 i위치에서 부모노드는 i/2 왼쪽 자식은 2i 오른쪽 자식은 2i + 1 위치에 있다.
우선순위 힙으로 구현한다.
PriorityQueue<Integer> priorityQueue1 = new PriorityQueue<>();
// 높은 숫자 순으로 우선순위 결정
PriorityQueue<Integer> priorityQueue2 = new PriorityQueue<>(Collections.reverseOrder());
add(), offer() //추가
poll(), remove() //제거
remove(int index) //index값 제거
clear() //모든 값 삭제
size() //크기
peek() //최고우선순위 값 확인