JavaScript深入了解Queue及应用场景

概念

首先,了解队列
队列遵循**先进先出(FIFO),**最常见的例子就是排队。最新添加要在末尾。

创建队列

我们创建一个类表示队列:

class Queue {
  constructor(){
    this.count = 0
    this.lowestCount = 0
    this.items = { }
  }
}

那么,接下来我们介绍一下队列可用的方法:

enqueue()向队列末尾添加一个(或多个)新的项
dequeue()移除队列的第一项并返回被溢出的元素
peek()返回队列中第一个元素,也就是最先被添加的。只返回,不移除。类似于front
isEmpty()判断队列中是否有元素
size()返回元素个数。类似于length

然后,我们给之前声明的类添加方法:

class Queue {
      constructor() {
        this.items = [];
      }
      //进队,从队的尾部进入
      enqueue(value) {
        this.items.push(value);
      }
      //出队,从队的头部出
      dequeue() {
        return this.items.shift();
      }
      //获取队中的第一个元素
      front() {
        return this.items[0];
      }
      //判断队是否为空
      isEmpty() {
        return this.items.length === 0;
      }
      //获取队中元素的个数
      size() {
        return this.items.length;
      }
    }

至此,Quene类的方法属性显而易见

解决问题:击鼓传花

介绍:一群人 围一圈 把花尽快的传递给旁边的人 停止在谁手上谁淘汰 直至最后一人获胜

//创建一个test方法来实现,传递参数
function test(elList, num) {
      const queue = new Queue() //使用我们刚才出创建的Queue
      const eledList = []
      for (let i = 0; i < elList.length; i++) {
        queue.enqueue(elList[i]) //获得一份玩家名单
      }
      while (queue.size() > 1) {
        for (let i = 0; i < num; i++) {
          queue.enqueue(queue.dequeue()) // 先移除一项,再添加至末尾
          //模拟出 你传出去 即为 威胁消失
        }
        eledList.push(queue.dequeue()) //达到次数 就算淘汰
      }
  //否则即为获胜
      return {
        eliminated: eledList,
        winner: queue.dequeue()
      }
    }
    const names = [1, 2, 3, 4, 5]
    const result = test(names, 7)
    result.eliminated.forEach(name => {
      console.log(`${name},被淘汰`);
    })
    console.log(`获胜者,${result.winner}`);

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值