queue 구현

KoEunseo·2022년 10월 31일
0

Daily_Coding

목록 보기
21/21
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() {
    // 빈 큐에 dequeue 연산을 적용해도 에러가 발생하지 않아야 합니다
    if (this.rear === this.front) {
      return;
    }

    const result = this.storage[this.front];
    delete this.storage[this.front];
    this.front += 1;

    return result;
  }
}
  1. queue는 현재
    { storage,
    front = 0,
    rear = 0 } 이렇게 생겼다.

  2. 빈 큐에 1을 넣어보자.
    this.storage[this.rear]은 현재 rear값이 키가 된다는 뜻이다.
    rear는 현재 0이다. 키는 0이고, 값은 1이 될 것이다.
    그리고 rear에 +1해준다.

  • queue는 이때
    { storage = { 0:1 }
    front = 0,
    rear = 1 } 이다.
  1. 2를 넣어보자. enqueue(2)
    현재 rear가 1이므로 키는 1, 값은 2가 될 것이다.
    그리고 rear에 +1 해준다.
  • queue는 이때
    { storage = { 0:1, 1:2}
    front = 0,
    rear = 2 } 이다.
  1. dequeue()를 해보자.
    만일 rear === front 면 return한다. rear와 front가 같다는 것은 큐가 비었다는 뜻이다.
    rear = 0, front = 0이다.
    이 조건문에 걸리지 않았다면 큐에 값이 있다는 뜻이다.
    result라는 변수에 현재 가장 앞에 있는 값을 할당한다.
    지금 front는 0이다. 따라서 this.storage[this.front]는 0:1 의 키값을 의미한다.
    0:1을 delete한다.
    그리고 front에 +1해준다.
    dequeue()를 하면 삭제한 값을 반환한다.
  • queue는 이때
    { storage = { 1:2 }
    front = 1,
    rear = 2 } 이다.
  • 그리고 dequeue()는 결과적으로 1을 리턴한다.
  1. size()를 해보자.
    현재 front는 1, rear는 2 이므로 size는 1이다.
profile
주니어 플러터 개발자의 고군분투기

0개의 댓글