본문 바로가기
카테고리 없음

자바스크립트 우선순위 큐 구현 및 사용 방법

by codesw 2024. 1. 6.
반응형

우선순위 큐 사용 예시

작업 스케줄링, 이벤트 처리 또는 태스크 관리와 같은 상황에서 유용하게 사용될 수 있습니다.

예를 들어, 여러 작업이 동시에 발생하고 이들을 우선순위에 따라 처리해야 할 때 이 코드를 사용할 수 있습니다.

또한 이 코드는 데이터 요소의 우선 순위에 따라 정렬된 데이터 구조를 다룰 때 다양한 응용 프로그램에 적용될 수 있습니다.

 

우선순위 큐 기능별 설명

  1. 클래스 정의 (PriorityQueue)
    • constructor: PriorityQueue 클래스의 생성자입니다. items 배열을 초기화하여 우선순위 큐의 요소를 저장합니다.
  2. 우선순위 큐에 요소 추가 (enqueue 메서드)
    • enqueue(element, priority): 주어진 요소와 우선 순위를 가진 객체를 만들어 큐에 삽입합니다.
    • 큐는 우선 순위에 따라 정렬되어 유지됩니다.
  3. 우선순위 큐에서 요소 제거하고 반환 (dequeue 메서드)
    • dequeue: 큐가 비어있지 않으면 가장 우선 순위가 높은 요소를 제거하고 반환합니다.
  4. 우선순위 큐의 첫 번째 요소 반환 (front 메서드)
    • front: 큐가 비어있지 않으면 가장 우선 순위가 높은 요소를 반환하지만 제거하지는 않습니다.
  5. 우선순위 큐가 비어있는지 확인 (isEmpty 메서드)
    • isEmpty: 큐가 비어있으면 true, 그렇지 않으면 false를 반환합니다.
  6. 우선순위 큐의 현재 크기 반환 (size 메서드)
    • size: 큐의 현재 크기를 반환합니다.
  7. 우선순위 큐 사용 예제
    • myPriorityQueue 객체를 생성하고 여러 작업을 다양한 우선 순위로 큐에 추가합니다.

자바스크립트 우선순위 자료구조 코드

 

class PriorityQueue {
constructor() {
this.items = [];
}

// 우선순위 큐에 요소 추가
enqueue(element, priority) {
const queueElement = { element, priority };
console.log(
`입력 작업 ${queueElement.element} : 입력 작업 우선 순위 ${queueElement.priority}`
);
let added = false;
console.log(`입력데이터 갯수 확인: ${this.items.length} \n`);
for (let i = 0; i < this.items.length; i++) {
console.log(
`추가되는값 ${queueElement.priority}< 기존값 ${this.items[i].priority}`
);
if (queueElement.priority < this.items[i].priority) {
this.items.splice(i, 0, queueElement);
console.log(this.items);
added = true;
break;
}
}

if (!added) {
this.items.push(queueElement);
console.log(this.items);
}
}

// 우선순위 큐에서 요소 제거하고 반환
dequeue() {
return this.isEmpty()
? "우선순위 큐가 비어있습니다."
: this.items.shift().element;
}

// 우선순위 큐의 첫 번째 요소 반환 (제거하지 않음)
front() {
return this.isEmpty()
? "우선순위 큐가 비어있습니다."
: this.items[0].element;
}

// 우선순위 큐가 비어있는지 확인
isEmpty() {
return this.items.length === 0;
}

// 우선순위 큐의 현재 크기 반환
size() {
return this.items.length;
}
}

// 우선순위 큐 사용 예제
let myPriorityQueue = new PriorityQueue();

myPriorityQueue.enqueue("Task 3", 3);
myPriorityQueue.enqueue("Task 1", 1);
myPriorityQueue.enqueue("Task 2", 2);
// myPriorityQueue.enqueue("Task 4", 4);
// myPriorityQueue.enqueue("Task 5", 10);
// myPriorityQueue.enqueue("Task 6", 20);

// console.log(myPriorityQueue.front()); // "Task 2"
// console.log(myPriorityQueue.dequeue()); // "Task 2"
// console.log(myPriorityQueue.size()); // 2
반응형

댓글