큐는 프린터를 생각하면 쉽다.
모든 페이지를 동시에 인쇄할 수 없다.
먼저 들어온 페이지가 다 인쇄될 때까지 기다리는 시간이 필요하고 이를 큐로 구현할 수 있다.
첫 번째로 들어온 게 첫 번째로 나가는 FIFO(First In First Out) 구조다.
스택과 마찬가지로 큐를 구현하기 위한 메소드도 많지 않다.
enqueue는 큐의 뒤쪽부터 데이터를 넣는다.
dequeue는 가장 먼저 들어온 큐의 앞쪽 데이터를 꺼내서 확인하고 없애는 메소드다.
peek는 dequeue와 유사하다. 큐의 앞쪽 데이터를 확인할 뿐이지 없애지는 않는다.
isEmpty는 스택이 비었는지 확인한다.
isFull은 스택이 꽉 찼는지 확인한다.
배열의 길이가 고정적이지 않은 자바스크립트에서는 별 의미가 없을 것 같다.
(배열의 길이를 고정하면서 queue로 사용하는 Circular Array에서 필요한 메소드인 것 같다.
Circular Array는 배열의 마지막 공간에 값이 차면 다음에 들어오는 데이터부터 다시 배열의 제일 앞에 넣는 방식이다.
배열을 돌려막기해서 queue처럼 활용한다.)
자바스크립트 코드
class Queue {
constructor() {
this.queue = [];
}
enqueue(value) {
this.queue.push(value);
}
dequeue() {
return this.queue.shift();
}
peek() {
return this.queue[0];
}
isEmpty() {
if (this.queue.length === 0) return true;
return false;
}
}
const queue = new Queue();
queue.enqueue('가');
queue.enqueue('나');
console.log(queue.peek()); // 가
queue.dequeue();
console.log(queue.isEmpty()); // false
console.log(queue.dequeue()); // 나
console.log(queue.isEmpty()); // true
'자료구조와 알고리즘' 카테고리의 다른 글
크롬 콘솔에서 알고리즘의 성능을 테스트하는 방법 (0) | 2021.07.19 |
---|---|
자바스크립트를 예제로 하는 자료구조와 알고리즘 6 - 해시 테이블(Hash Tables) (0) | 2021.02.25 |
자바스크립트를 예제로 하는 자료구조와 알고리즘 4 - 스택(Stack) (0) | 2021.02.25 |
자바스크립트를 예제로 하는 자료구조와 알고리즘 3 - 링크드 리스트(Linked List) (0) | 2021.02.25 |
자바스크립트를 예제로 하는 자료구조와 알고리즘 2 - 배열(Array) (0) | 2021.02.24 |