第二章隊列

什麼是隊列

隊列是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。允許插入的端是隊尾,允許刪除的端是隊頭。 隊列是一個先進先出的線性表 。

隊列結構概念:入隊、出隊、隊列頭、隊列尾

clipboard.png

clipboard.png

js實現棧結構依靠數組

方法名 操作
enqueue 入隊
dequeue 出隊
front 查看隊列頭
isEmpty 檢查隊列是否爲空
size 獲取隊列大小
clear 移除全部元素

代碼實現

class Queue {
  constructor() {
    // 私有屬性
    this._items = [];
  }
  // 入隊
  enqueue(el) {
    this._items.push(el);
  }
  // 出隊
  dequeue(el) {
    this._items.shift(el);
  }
  // 查看隊列頭
  front() {
    return this._items[this._items.length - 1];
  }
  // 檢查隊列是否爲空
  isEmpty() {
    return this._items.length === 0;
  }
  // 查看隊列的大小
  size() {
    return this._items.length;
  }
  // 清除隊列
  clear() {
    this._items = [];
  }
}

下面來個例子

clipboard.png

炒股遊戲:玩家猜漲跌,猜錯了就出局,遊戲最終結果爲玩家全部輸了
爲什麼是炒股遊戲:找不到圖你讓我怎麼辦,沒辦法只能隨便編了

下面開始碼了

// 玩家列表
let arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
// 遊戲規則
function regulation() {
  return Math.random() > 0.5
}

function stocks() {
  let queue = new Queue()
  // 入隊
  arr.forEach(item => {
    queue.enqueue(item)
  })
  // 當隊列爲空,說明全部出隊,遊戲結束
  while (!queue.isEmpty()) {
    for (let i = 0; i < arr.length; i++) {
      // 爲true說明玩家猜對了
      if (regulation()) {
        // 循環隊列
        queue.enqueue(queue.dequeue())
        console.log(`玩家${arr[i]}贏了`)
      } else {
        // 出隊
        queue.dequeue()
        console.log(`玩家${arr[i]}輸了`)
      }
    }
  }
  console.log('全部玩家輸了')
}

此章完結,下一章鏈表
歡迎關注,以便第一時間獲取最新的文章

clipboard.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章