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

    2021년 06월 29일

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

    배열로 큐 구현하기

    class Queue {
      constructor() {
        this.queue = [];
        this.front = 0;
        this.rear = 0;
      }
      enqueue(value) {
        this.queue[this.rear++] = value;
      }
    
      dequeue() {
        const value = this.queue[this.front];
        delete this.queue[this.front];
        this.front += 1;
        return value;
      }
    
      peek() {
        return this.queue[this.front];
      }
    
      size() {
        return this.rear - this.front;
      }
    }
    
    const queue = new Queue();
    queue.enqueue(1);
    queue.enqueue(3);
    queue.enqueue(5);
    queue.dequeue();
    console.log(queue);

    최근에 큐를 다시 공부하다가 알게 된 사실이 있다.

    배열로 구현한 큐에서 dequeue 연산을 할 때, shift()로 구현하는 것은 자바스크립트 배열에서 shift()가 O(n)의 시간 복잡도를 가진다. 그래서 본래 큐에서 기대하는 로직이 수행되지 않기 때문에 잘못된 것이다.

    위의 코드처럼 로직을 짜는 것이 맞다.

    연결 리스트로 큐 구현하기

    class Node {
        constructor(value){
            this.value = value;
            this.next = null;
        }
    }
    
    class Queue {
        constructor(){
            this.head = null;
            this.tail = null;
            this.siz = 0;
        }
        
        enqueue(newValue){
            const newNode = new Node(newValue);
            if(this.head === null) {
                this.head = this.tail = newNode;
            } else {
                this.tail.next = newNode;
                this.tail = newNode;
            }
            this.size += 1;
        }
        
        dequeue(){
            const value = this.head.value;
            this.head = this.head.next;
            this.size -= 1;
            return value;
        }
        
        peek(){
            return this.head.value;
        }
    }
    Tags
      © 2021 dmchoi, Powered By Gatsby.