리코딩 : 자료구조(Data Structure)

자바스크립트 12. 자료구조(Data Structure) - 큐(Queue)

BreezeBm 2020. 11. 5. 15:28

계속해서 이어지는 자료구조 기록! 오늘은 큐!

Photo by Timothy K on Unsplash

순간 이미지를 보면서 얼마나 맛집일까 궁굼증이 들긴 하지만, 각설하고 오늘은 큐(Queue)에 대해서 기록해보자.

 

✅큐(Queue)의 개념

큐는 사람들이 음식점이나 놀이기구를 타기위해 기다리는 줄을 생각하면 이해하기 쉽다. 맛집 오픈 10분 전에 가게앞에서 부터 한사람 한사람 줄을 세우는 모습을 상상해보면 좋을 것 같다. 물론 새치기하는 사람들은 없다고 가정한다.(진짜 새치기 하는 인간들.. ㅂㄷㅂㄷ)

 

맛집이 오픈이 되서 손님들이 들어갈 때, 당연히 먼저 온 사람이 먼저 들어가서 자리를 안내받고 앉게 되고, 주문을 하게된다. 큐도 마찬가지 이다. 먼저 들어간 데이터가 먼저나오는 FIFO(First In First Out) 선입선출 구조로 되어있다.

 

만약에 맛집을 들어가는 순서가 스택이었다면 얼마나 재앙일지... 끔찍하다... 늦게 온 사람이 먼저 들어간다고...? ㅂㄷㅂㄷ


큐 활용 예시

큐는 주로 데이터가 들어오는 시간의 순서대로 처리하는 상황에 잘 이용된다.

  • 인쇄 대기열, 프린터의 출력 처리

  • 우선순위가 같은 작업 예약

  • 콜센터의 고객대기 시간

  • 게임 대전 매칭 시스템

  • 은행 업무 


큐 메소드

이번 코드스테이츠 스프린트에서는 3가지의 메소드를 구현해 보았다.

  • enqueue(element) - 요소를 큐의 뒤에 추가합니다

  • dequeue() - 요소를 큐의 앞에서 제거하고 반환합니다.

  • size() - 큐의 현재 요소 개수를 반환합니다


💻큐의 구현

이번 스프린트에서 클래스와 저장공간은 객체로 해서 구현해 보았다.

class Queue {
  constructor() {
    this.storage = {};
    this.front = 0;
    this.rear = 0;
  }

먼저 front에서는 삭제만 이루어 지게 만들었고, rear에서는 추가만 일어난 것으로 만들었다.

 

1. enqueue(element)

요소를 뒤에 추가하는 enqueue의 경우에는 저장소에 존재하는 rear에 주어지는 요소를 추가해 주었고, rear의 크기를 키워 주는 방식으로 작성하였다.

 

2.dequeue()

앞에있는 요소를 제거하고, 그 값을 반환하기 때문에, 객체에서 프로퍼티를 지우는 방법인 delete를 사용해 주었고, 그리곡 반환을 하기 위해서 미리 다른 곳에 할당해 주고, 그 값을 리턴해 주고 프론트의 값을 키워 주었다.

 

3.size()

이 메소드는 역시 length가 사용되지 않기 때문에 스택에서와 마찬가지로 Object.keys()를 활용해서 크기를 반환해 주었다. 아니면 rear의 값에서 front의 값을 빼주어도 괜찮을 것 같다.

 

다음에도 계속 자료구조를 기록해보자!