Concept
큐는 먼저 들어온 것이 먼저 나가는 구조를 가지고 있습니다. 실생활과 연관지어 은행 창구를 떠올릴수 있습니다.
먼저 번호표를 뽑은 사람이 먼저 서비를 받게 되고 중간에 새치기는 불가능한 것이 기본적인 큐의 구조입니다.
class Queue {
constructor() {
this.store = [];
}
enqueue(item) {
this.store.push(item);
}
dequeue() {
this.store.shift();
}
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.dequeue(); // 1
Concept
배열 기반 우선순위 큐
연결리스트 기반 우선순위 큐
힙 기반 우선순위 큐
splice() 메소드로 dequeue를 구현합니다.
Score가 높은 학생을 먼저 추출한다는 방식으로 Priority Queue를 구현하였습니다.
class PriorityQueue {
constructor() {
this.store = [];
}
enqueue(item) {
this.store.push(item);
}
dequeue() {
let entry = 0;
this.store.forEach((item, index) => {
if (this.store[entry].score < this.store[index].score) {
entry = index;
}
});
return this.store.splice(entry, 1);
}
}
class Student {
constructor(name, score) {
this.name = name;
this.score = score;
}
}
// student와 같이 우선순위의 아이템이 되는 클래스
class PriorityQueueElement {
constructor(element, priority) {
this.element = element;
this.priority = priority;
}
}
const priorityQueue = new PriorityQueue();
const pengsoo = new Student('Pengsoo', 10);
const kim = new Student('MJKim', 5);
const jangwon = new Student('jangwon', 3);
priorityQueue.enqueue(pengsoo);
priorityQueue.enqueue(kim);
priorityQueue.enqueue(jangwon);
priorityQueue.dequeue();