(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;
}
}
느낀점
추상적인 개념(이론적인)을 직접 구현하는 것은 상당히 재밌는 일이었으나
나와같은 초보 개발자들에게 상당히 낯설고 힘든 사고 과정이 필요했다.
매번 신기하다. 배울수록 모르는게 많아져 흥미롭다.
'Dev log' 카테고리의 다른 글
Next.JS - page directory VS app directory (0) | 2024.04.01 |
---|---|
JavaScript 다중상속에 대한 고찰 (0) | 2020.08.02 |
2020.07.23 - JavaScript에서 Stack과 Queue의 구현 - 1 (0) | 2020.07.24 |
댓글