>  기사  >  웹 프론트엔드  >  JavaScript의 대기열에 대한 자세한 소개(코드 예)

JavaScript의 대기열에 대한 자세한 소개(코드 예)

不言
不言앞으로
2019-02-13 09:36:092098검색

이 글은 자바스크립트의 대기열에 대한 자세한 소개(코드 예제)를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

큐 정의

큐는 선입선출 원칙을 따르는 항목의 순서 집합입니다. 스택(Stack) 스택(Stack) 푸시(Push) 작업인지 팝(Pop) 작업인지에 관계없이 스택의 맨 위에서 동작하며 큐의 끝에 요소가 추가되고 맨 위에서 제거되는 것을 다이어그램으로 표현합니다.

#🎜 🎜#JavaScript의 대기열에 대한 자세한 소개(코드 예)

더 생생한 예를 들자면, 대기열 서비스, 항상 먼저 줄을 선 사람이 먼저 서비스를 받게 됩니다. , 큐 점프 상황에 관계없이

큐 생성

은 스택 생성과 유사합니다. 먼저 함수를 생성합니다. 대기열을 나타내는 배열을 정의하고 대기열에 요소를 저장하기 위한 배열을 정의합니다.

function Queue() {
  let items = []
}
대기열을 만든 후 이에 대한 몇 가지 메서드를 정의해야 합니다. 일반적으로 대기열에는 다음 메서드가 포함됩니다. :

  • enqueue(element): 대기열 끝에 새 항목 추가#🎜 🎜#

  • dequeue( ): 대기열의 첫 번째 항목을 제거하고 제거된 요소를 반환
  • front( ): 변경 사항 없이 대기열의 첫 번째 항목을 반환
  • # 🎜🎜#

    isEmpty(): 대기열에 요소가 없으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • # 🎜🎜#
  • size(): 반환 대기열에 포함된 요소 수

  • 특정 구현:

    function Queue() {
      let items = []
      // 向队列的尾部添加新元素
      this.enqueue = function (element) {
        items.push(element)
      }
      // 遵循先进先出原则,从队列的头部移除元素
      this.dequeue = function () {
        return items.shift()
      }
      // 返回队列最前面的项
      this.front = function () {
        return items[0]
      }
      // 返回队列是否为空
      this.isEmpty = function () {
        return items.length === 0
      }
      // 返回队列的长度
      this.size = function () {
        return items.length
      }
      // 打印队列,方便观察
      this.print = function () {
        console.log(items.toString())
      }
    }
대기열 사용

#🎜🎜 #

다음으로 대기열의 용도를 살펴보겠습니다.

let queue = new Queue()
queue.enqueue('a')
queue.enqueue('b')
queue.enqueue('c')
queue.dequeue()
queue.print()
먼저 대기열에 세 가지 요소(a, b, c)를 추가한 다음 대기열에서 요소를 제거하고 마지막으로 기존 항목을 인쇄합니다. 이 프로세스를 함께 설명하겠습니다.

es6 Queue 구현

JavaScript의 대기열에 대한 자세한 소개(코드 예)

은 Stack 클래스를 구현하는 것과 동일합니다. es6 클래스 구문을 사용하여 Queue 클래스를 구현하고, WeakMap을 사용하여 개인 속성 항목을 저장하고, Queue 클래스를 반환하는 데 사용할 수 있습니다. :

let Queue = (function () {
  let items = new WeakMap
  class Queue {
    constructor () {
      items.set(this, [])
    }
    enqueue (element) {
      let q = items.get(this)
      q.push(element)
    }
    dequeue () {
      let q = items.get(this)
      return q.shift()
    }
    front () {
      let q = items.get(this)
      return q[0]
    }
    isEmpty () {
      let q = items.get(this)
      return q.length === 0
    }
    size () {
      let q = items.get(this)
      return q.length
    }
    print () {
      let q = items.get(this)
      console.log(q.toString())
    }
  }
  return Queue
})()
let queue = new Queue()
queue.enqueue('a')
queue.enqueue('b')
queue.enqueue('c')
queue.dequeue()
queue.print()
#🎜🎜 #우선순위 큐

우선순위 큐, 이름에서 알 수 있듯이 큐의 각 요소는 삽입될 때 고유한 우선순위를 갖습니다. 삽입 작업은 순서에 따라 수행됩니다. 이전 대기열 구현과 약간 다릅니다. 특정 코드를 살펴보겠습니다.

function PriorityQueue() {
  let items = []
  // 队列元素,多定义一个优先级变量
  function QueueElement(element, priority) {
    this.element = element
    this.priority = priority
  }
  this.enqueue = function (element, priority) {
    let queueElement = new QueueElement(element, priority)
    let added = false
    for (let i = 0; i <p style="white-space: normal;">Enter 대기열이 비어 있으면 추가하세요. 그렇지 않으면 우선순위가 낮을수록 우선순위가 높아집니다. 다음 다이어그램은 호출 프로세스를 보여줍니다. 🎜#<strong></strong></p><p>원형 대기열</p><p><br>원형 대기열, 이름에서 알 수 있듯이: 숫자가 주어진 다음 대기열을 반복하여 시작합니다. 대기열의 시작 부분에서 항목을 제거한 다음 대기열 끝에 추가합니다. 루프가 지정된 숫자에 도달하면 루프를 중단하고 요소가 하나 남을 때까지 대기열의 헤드에서 항목을 제거합니다. 구체적인 코드를 살펴보겠습니다: </p><pre class="brush:php;toolbar:false">unction Queue() {
  let items = []
  this.enqueue = function (element) {
    items.push(element)
  }
  this.dequeue = function () {
    return items.shift()
  }
  this.front = function () {
    return items[0]
  }
  this.isEmpty = function () {
    return items.length === 0
  }
  this.size = function () {
    return items.length
  }
  this.print = function () {
    console.log(items.toString())
  }
}
function loopQueue(list, num) {
  let queue = new Queue()
  for (let i = 0; i<list.length> 1) {
    for (let j = 0; j<num console.log></num></list.length>

위 내용은 JavaScript의 대기열에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제