Queue

YSB·2024년 3월 5일

1. Queue란 ?


  • Queue는 줄을 서서 기다리다대기 행렬 이라는 뜻을 가지고 있다.
  • Queue는 Stack과 반대되는 개념이다.
  • Queue는 먼저 들어간 데이터(data)가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out) 을 특징으로 가지고 있다.Queue는 데이터가 입력된 순서대로 처리할 때 주로 사용한다.

❗️일상 생활에서 Queue의 실사용 예제

  • Queue는 순서대로 지나가는 자동차가 지나가는 톨게이트와 유사하다.
  • 톨게이트를 Queue 자료구조, 자동차는 데이터로 비유할 수 있다.
  • 가장 먼저 진입한 자동차가 가장 먼저 톨게이트를 통과한다.
  • 다시 말해, 가장 나중에 진입한 자동차는 먼저 도착한 자동차가 모두 빠져나가기 전까지는 톨게이트를 빠져나갈 수 없다.

❗️컴퓨터에서 Queue의 실사용 예제

  1. 데이터 처리 순서가 중요한 경우: 작업 스케줄링, 대기열 관리 등 순서대로 처리해야 하는 상황에 사용됩니다.
  2. 자원 공유 관리: 프린터 대기열 관리, 네트워크 요청 처리 등 공유 자원에 대한 접근을 관리하는 데 사용됩니다.
  3. 실시간 시스템: 실시간 시스템에서는 요청을 순서대로 처리해야 할 때 큐를 사용합니다.
  4. 통신 버퍼링: 네트워크 통신에서 데이터 패킷을 순차적으로 처리하기 위해 큐가 사용됩니다.
  • 프린터 인쇄 예시 )
    1. 문서에 프린터 출력 버튼을 누르면 해당 문서는 인쇄 작업(임시 기억 장치의 Queue)에 들어간다.
    2. 프린터는 인쇄 작업 Queue에 들어온 문서를 순서대로 인쇄한다 ****

2. Queue 코드 구현


2-1. 클래스로 구현

  • 사용자 정의 데이터 타입으로 Queue를 정의하면, new 키워드를 통해 인스턴스를 만들 수 있다.
  • 그리고 생성한 인스턴스를 통해 다양한 메서드를 사용할 수 있다.
class Queue {
    constructor() {
        this.items = [];
    }

    // 요소를 큐에 추가
    enqueue(element) {
        this.items.push(element);
    }

    // 큐에서 요소 제거 및 반환
    dequeue() {
        if (this.isEmpty()) {
            return "Underflow";
        }
        return this.items.shift();
    }

    // 큐가 비었는지 확인
    isEmpty() {
        return this.items.length === 0;
    }
}

// 큐 사용 예
let queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 1
console.log(queue.dequeue()); // 2

2-2. 일반 배열로 구현

  • Array를 사용하면 사용자 정의 데이터 타입을 구현하지 않고도 몇 가지의 메서드로 Queue 처럼 동작하도록 사용할 수 있다.
  • 자료구조로써 Queue의 특성만 이해한다면, Array를 활용하여 Queue로 사용할 수 있다.
  • 자료구조는 자료(데이터)를 다루는 구조 그 자체를 뜻하며, 구현하는 방식에는 제약이 없다.
let queue = [];

// 요소 추가
queue.push(1);
queue.push(2);
queue.push(3);

// 요소 제거 및 출력
console.log(queue.shift()); // 1
console.log(queue.shift()); // 2

// 큐 출력
console.log(queue); // [3]
profile
즐거운하루!

0개의 댓글