자바 스크립트에서 대기열을 구현하는 가장 좋은 방법

요약: 대기열은 예를 들어 재생 목록 Mp3에서 사용되는 중요한 데이터 구조입니다.

Introduction

Prerequisites

Implementation

Uses Cases



소개

처음에 대기열이란 많은 경우에 사용되는 단순한 데이터 구조에 불과합니다. 앞으로 살펴보겠습니다. 선입선출(First In First Out)을 의미하는 FIFO 원칙을 따르며 선착순이 먼저 제공되는 실제 대기열과 비교합니다. 사진을보세요.



이제 어떻게 작동하는지 명확하게 보여줍니다.

Queue는 두 가지 주요 방법을 사용하지만 이 기사에서는 두 가지 이상을 볼 것입니다.
  • 우리가 생성한 개체의 마지막 항목에 항목을 추가하는 대기열에 넣기 배열 대신 개체를 다른 방법으로 사용하지만 결과는 동일합니다
  • Dequeue는 객체에 처음 삽입되는 객체의 첫 번째 항목을 제거하는 것입니다
  • .
  • 객체에서 첫 번째 항목을 얻기 위해 껍질을 벗김
  • 객체의 길이를 얻기 위한 길이
  • 비어 있는지 확인하는 isempty

  • 전제 조건
  • 자바스크립트를 알기 위해
  • 그 외

  • 스택과 큐의 차이점을 아는 것이 중요합니다. 먼저 주목해야 할 것은 큐를 사용하기 위해 배열 대신 객체를 사용할 것이라는 점입니다. 저는 스택과 큐를 사용하기 위해 LIFO를 사용하는 큐의 견고한 기반을 갖기 위해 그렇게 하고 있습니다. FIFO를 따른다

    스택에 대해 알아보려면 링크를 사용하십시오.

    구현

    먼저 전체 코드를 살펴본 다음 조각으로 나눕니다.



    때가됐다.




    class Queue {
      constructor() {
        this.element = {};
        this.head = 0;
        this.tail = 0;
      }
    


    전제 조건으로 클래스를 알아야 합니다. 지금 우리가 하고 있는 것은 element which is empty, head and tail are equal to zero
      enqueue(element) {
        this.element[this.tail] = element;
    
        console.log('enqueue', this.element[this.tail]);
    
        this.tail++;
    
        return element;
      }
    


    enqueue는 마지막으로 임의의 요소를 추가하는 것이므로 위의 코드와 같이 enqueue를 생성합니다. 인수가 함수에 전달되면서 이제 우리는 이 매우 중요한 부분을 이해해야 합니다.

        this.element[this.tail] = element;
    
        console.log('enqueue', this.element[this.tail]);
    
        this.tail++;
    


    요소를 객체로 선언할 때 여기서 우리가 하는 일은 다음과 같습니다.

    this.element[this.tail] = element;
    


    저것this.element[this.tail] is a key and when we assign an element to it we are saying take the key and assign this element as a value of the object . 예를 보자


    내가 하고 있는 일은 기본이다. 이제 터미널을 보자.



        console.log('enqueue', this.element[this.tail]);
    
        this.tail++;
    


    코드 그냥 꼬리가 추가됩니다.

      dequeue() {
        const item = this.element[this.head];
        delete this.element[this.head];
        this.head++;
        return item;
      }
    


    객체의 첫 번째 요소를 제거한 다음 항목에 저장하면 함수가 항목을 반환하는 것만으로도 새로운 것이 아닌 기본 코드입니다.

     get length() {
        const result = this.tail - this.head;
    
        return result;
      }
    
      peek() {
        return this.element[this.head];
      }
    
      get isEmpty() {
        return this.length === 0;
      }
    



    get isEmpty() {
        return this.length === 0;
      }
    


    길이가 0인지 확인하고 있습니다. 크기는 js의 속성이 아닙니다. 클래스에서 정의한 get 메서드에서 구현하고 있습니다.

    let queue = new Queue();
    
    


    수업 시작

    const result = () => {
      for (let i = 4; i <= 15; i++) {
        queue.enqueue(i);
      }
    
    


    조건이 참이면 4에서 시작하여 15에서 끝나는 루프를 생성합니다.

     console.log('length', queue.length);
    


    객체의 길이 얻기

     while (!queue.isEmpty) {
        console.log(queue.dequeue());
      }
    };
    
    result();
    


    우리가 하고 있는 개체를 청소하는 것은 매우 간단합니다. 개체를 처음부터 끝까지 청소하면 개체가 실제로 비어 있는지 확인하는 것입니다. 마지막으로 함수를 호출합니다.

    class Queue {
      constructor() {
        this.element = {};
        this.head = 0;
        this.tail = 0;
      }
    
      enqueue(element) {
        this.element[this.tail] = element;
    
        console.log('enqueue', this.element[this.tail]);
    
        this.tail++;
    
        return element;
      }
    
      dequeue() {
        const item = this.element[this.head];
        delete this.element[this.head];
        this.head++;
        return item;
      }
    
      get length() {
        const result = this.tail - this.head;
    
        return result;
      }
    
      peek() {
        return this.element[this.head];
      }
    
      get isEmpty() {
        return this.length === 0;
      }
    }
    
    let queue = new Queue();
    
    const result = () => {
      for (let i = 4; i <= 15; i++) {
        queue.enqueue(i);
      }
    
      queue.isEmpty;
    
      console.log('length', queue.length);
    
      while (!queue.isEmpty) {
        console.log(queue.dequeue());
      }
    };
    
    result();
    
    


    전체 코드. 여기까지 오셨다면 정말 대단하십니다. 코드가 이해되지 않는다면 기꺼이 도와드리겠습니다. 도움이 된다면 친구와 게시물을 공유하세요.

    신청
  • 중단을 처리하기 위해 운영 체제에 적용됩니다.
  • 마지막에 노래를 추가하거나 앞에서부터 재생하기 위해 적용됩니다.
  • 인터넷에 연결되어 있지 않은 친구에게 메시지를 보낼 때 WhatsApp에 적용하면 이 메시지가 WhatsApp 서버에 대기 중입니다.
  • 좋은 웹페이지 즐겨찾기