第二章队列

什么是队列

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。 队列是一个先进先出的线性表 。

队列结构概念:入队、出队、队列头、队列尾

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

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