JavaScript 的資料結構和演算法 - 佇列篇 (附程式碼)

MasterShu發表於2020-01-05

應該說佇列是日常生活中接觸最多的。

你買東西結賬要排隊,等公交要排隊,取錢要排隊。這個對,就可以理解為佇列了。

佇列的操作只有兩個,入隊出隊

理解佇列

根據場景也可以看出佇列:

  • 線性表
  • 操作受限
  • 先到先得

佇列不管是程式碼還是概念,都十分好理解,下面我們就貼出程式碼。

入隊

  /**
   * Add a new element to the end.
   * @param item
   */
  enqueue(item) {
    this.data[this.head + this.count] = item
    this.count++
  }

出隊

  /**
   * The element in front of the queue will removed and returned.
   * @returns {null|*}
   */
  dequeue() {
    if (this.count <= 0) return null
    const element = this.data[this.head]
    this.head++
    this.count--
    return element
  }

詳細程式碼見底部連結

發現更多

佇列和棧一樣,也是可以使用陣列或者連結串列來實現。並且佇列也是分為多種不同的特性佇列。

迴圈佇列 可以理解為一個環形的佇列,不需要進行資料搬遷,而是不斷調整頭部和尾部就可以一直使用了。

阻塞佇列 這個接觸過 Redis 的應該很快就能理解。就是 出隊入隊 時增加限制條件,以此來阻塞佇列。

併發佇列 這個可以結合著阻塞佇列來理解,為了在併發時保證執行緒安全。

本文程式碼連結 https://github.com/MasterShu/JavaScript-Da...

本作品採用《CC 協議》,轉載必須註明作者和本文連結
路漫漫其修遠兮,吾將上下而求索。

相關文章