My Boundary As Much As I Experienced

자바스크립트로 큐(Queue) 구현하기 본문

Algorithm/Data Structure

자바스크립트로 큐(Queue) 구현하기

Bumang 2024. 3. 25. 12:27

Queue란?

"Oh, I'll put this in my watch later queue!"

플레이리스트 큐, 입장 대기 큐 등.. 우리가 직관적으로 아는 그 큐 맞다.

선입선출, 들어온 대로 나가는 리스트인 queue이다.

 

자바스크립트에서 배열과 shift메소드를 Queue 대용으로 쓰면 안 좋은 이유

자바스크립트 배열을 shift 메소드를 쓰며 queue같이 쓰는 것도 가능하긴 하지만

대규모 데이터를 queue로 처리해야될 때 자바스크립트 배열은 좋은 선택지가 아니다.

왜냐하면 shift()메소드로 특정 인덱스 인자를 제거했을 때,

다음 인덱스에 있는 인자를 해당 빈 인덱스에 끌어오고, 또 다다음것을 다음으로 끌어오고...

이런 O(n)시간복잡도의 재배치가 발생하기 때문이다. 얼마 안 되는 데이터면 shift로 처리하고 말지만,

십만개가 넘는 데이터를 shift()할때마다 위와 같은 재배치를 한다면 얼마나 느려질지 안 봐도 뻔하다.

 

그러므로 주로 자바스크립트로 코테를 한다면 Queue를 외울 수 밖에 없다.

이젠 막 외우려 하지 않아도 저절로 외워진달까..

bfs를 풀려면 필수적으로 알아야 하는 자료구조이기도 하다.

 

class Queue {
  constructor() {
    this.list = {};
    this.head = 0;
    this.tail = 0;
  }

  enqueue(item) {
    this.list[this.tail] = item;
    this.tail++;
  }

  dequeue() {
    if (this.head === this.tail) return null;
    let item = this.list[this.head];
    delete this.list[this.head];
    this.head++;
    return item;
  }

  getLength() {
    return this.tail - this.head;
  }

  peek() {
    return this.list[this.head];
  }
}