본문 바로가기
Dev log

2020.07.23 - JavaScript에서 Stack과 Queue의 구현 - 2

by Pig_CoLa 2020. 7. 24.
SMALL

 

(Stack, Queue에 관한 내용은 이 페이지에서 상세하게 설명하지 않는다. 추후 정리하여 JavaScript 카테고리에 업로드 예정.)

Queue 구현을 위한 생각

배열 (Array)를 사용하지 않고 구현하자. (pop, unshift, push 등의 메서드 사용시 바로 해결되버린다..)

Queue클래스

Stack클래스를 정의하여 front, rear, storage라는 인스턴스 속성을 만들어준다.

front는 가장 먼저 들어온 값의 키값(빼낼 때의 키값)을 가르키는 포인터 역할이다.

rear는 가장 나중에 들어온 값의 키값(추가 되어야 할 키값)을 가르키는 포인터 역할이다.

storage는 빈 오브젝트를 넣어준다.

enqueue메서드

Queue에 전달인자를 추가하는 메서드

새로 들어온것은 가장 뒤에 추가된다.

 

전달인자를 storage에 추가한다. 키값은 현재 rear값 이다.

rear값을 1 증가시킨다.

dequeue메서드

Queue에 쌓인 가장 앞의 값을 삭제하고 반환하는 메서드

가장 오래전에 들어온 값을 반환한다.

 

storage에서 키를 현재 front로 갖는 값을 임시변수에 넣어준다

storage에서 해당 키를 제거한다.

front를 1 증가시킨다.

임시변수를 반환한다.

size메서드

Queue의 크기를 반환하는 메서드

현재 크기는 rear - front 이니 해당 연산 결과를 반환한다.

Queue구현 코드

구현 Code가 노출되니 과제, 학습 등으로 직접 구현을 희망한다면 이전페이지로 돌아가는 것을 권장한다

 

 

 

 

 

 

 

 

// Queue클래스
class Queue {
  constructor() {
    this.storage = {};
    this.front = 0;
    this.rear = 0;
  }

  size() { return this.rear - this.front }

  enqueue(element) {
    this.storage[this.rear] = element;
    this.rear += 1;
  }

  dequeue() {
    const temp = this.storage[this.front];
    delete this.storage[this.front];
    this.front += this.front < this.rear ? 1 : 0;
    return temp;
  }
}

느낀점

추상적인 개념(이론적인)을 직접 구현하는 것은 상당히 재밌는 일이었으나

나와같은 초보 개발자들에게 상당히 낯설고 힘든 사고 과정이 필요했다.

매번 신기하다. 배울수록 모르는게 많아져 흥미롭다.

LIST

댓글