큐 (Queue)
큐는 선입선출(FIFO, First-In-First-Out)의 구조를 가지는 자료구조다. 한쪽 끝에 요소를 추가 (enqueue)하고, 다른 쪽 끝에서 요소를 제거(dequeue) 한다. 큐는 배열 또는 단일 연결 리스트를 통해서 구현할 수 있다.
BFS 알고리즘 또한 일반적으로 queue를 이용하여 구현한다.
시간 복잡도
동작 | Big-O |
---|---|
Enqueue | O(1) |
Dequeue | O(1) |
Front | O(1) |
Back | O(1) |
isEmpty | O(1) |
자바스크립트로 구현
class QueueNode {
constructor(value) {
this.value = value;
this.next = null;
}
}
class Queue {
constructor() {
this.front = null;
this.back = null;
this.size = 0;
}
// Queue의 뒤에 데이터 추기
add(value) {
this.size++;
let node = new QueueNode(value);
if (!this.front) {
this.front = node;
} else if (!this.back) {
this.front.next = node;
this.back = node;
} else {
let back = this.back;
back.next = node;
this.back = node;
}
}
// 맨 앞 데이터 출력
peek() {
if (this.front) {
return this.front.value;
} else {
return null;
}
}
// 맨 앞 데이터 출력 하고 삭제
poll() {
if (this.front) {
this.size--;
let front = this.front;
this.front = front.next;
return front.value;
} else {
return null;
}
}
}
const queue = new Queue();
queue.add(1);
queue.add(2);
queue.add(4)
console.log(queue.peek());
console.log(queue.poll());
console.log(queue.poll());
console.log(queue.poll());
console.log(`size: ${queue.size}`);
필수 문제
- LeetCode
추천 연습 문제
참조
Array cheatsheet for coding interviews | Tech Interview Handbook