JavaScript 데이터 구조: 대기열: 소개

소개



를 완료한 후 대기열부터 시작합니다.


대기열이란 무엇입니까?


  • "First In, First Out"-Principle을 사용합니다.
  • 예: 상점 앞에 있는 사람들의 대기열, 프린터 대기열
  • 대기열을 구현하는 여러 방법이 있습니다: 배열, 단일 연결 목록, 이중 연결 목록




  • 대기열의 Big O


  • 액세스: O(N)
  • 검색: O(N)
  • 삽입: O(1)
  • 삭제: O(1)



  • 예시



    Singly Linked List를 사용하여 Queue를 만들 것입니다.
    A (start) ==> B (end)
  • 끝까지 대기열에 추가(= 추가)할 수 있습니다(예: 새 사람이 대기열의 마지막 사람이 됨)
  • 처음부터 대기열에서 제거(= 제거)할 수 있습니다(예: 처음에 있는 사람이 다음에 서비스를 받음)
  • A
  • 라인의 다음 노드입니다.
  • A에는 다음 노드( next )
  • 에 대한 포인터( B )가 있습니다.
  • B는 Queue
  • 에 대기열에 넣은(= 추가한) 마지막 노드입니다.
  • 대기열에서 빼면(= 제거) A 라인의 다음 노드는 B여야 합니다.



  • 설정



    대기열을 구축하려면 다음 부분이 필요합니다.
  • 대기열의 다음 항목에 대한 포인터와 값이 있는 노드
  • 길이가 있는 Queue, 대기열의 시작에 대한 포인터, 대기열의 끝에 대한 포인터

  • // a Node has a value (`value`) and a pointer to the next node (`next`)
    class Node {
      constructor(value) {
        this.value = value;
        this.next = null;
      }
    }
    
    // a Queue has a length (`length`), a start (`start`), an end (`end`)
    class Queue {
      constructor() {
        this.length = 0;
        this.start = null;
        this.end = null;
      }
    }
    



    생각



    대기열을 설정했습니다. 이제 Queue 내에 최소한 두 가지 메서드가 필요합니다.
  • Queue 끝에 새 노드를 추가하는 메서드: enqueue
  • 대기열의 시작 부분에서 노드를 제거하는 방법: dequeue



  • 다음 부분



    Queue에 대한 첫 번째 방법을 구현할 것입니다.

    흥미로운 것들을 놓치지 마세요, subscribe !


    질문


  • 배열을 사용하여 대기열을 만들 수도 있습니다. 우리는 어떻게 이것을 할 수 있습니까? 장단점이 있습니까?
  • 좋은 웹페이지 즐겨찾기