JavaScript数据结构 队列应用之击鼓传花

经典面试题 之击鼓传花

甲乙丙丁小明 玩击鼓传花的游戏  从甲开始传 设置循环嵌套 当内部循环结束时跳出循环并 将当前循环到的最后一个人从队中淘汰 也就是出队 。然后开始下一次内部for循环

为了形成一个圈  内部for循环每次将循环到的当前的人 出队并从队尾进队 这样形成一个圈

外层循环直到只剩最后一个人为止

class Queue {
    #items = {}  //一个对象
    #count = 0
    #lowCount = 0

    dequeue() { //出队列
        if(this.isEmpty()){
            return undefined
        } 
        let res = this.#items[this.#lowCount]
        delete this.#items[this.#lowCount]
        this.#lowCount++
        return res
    }

    enqueue(data) {  //进入队列
        this.#items[this.#count] = data
        this.#count++ 
    }

    front() {  //返回对头 
        return this.#items[this.#lowCount]
    }

    isEmpty() {
        return this.size() === 0    
    }

    size() { 
        return this.#count-this.#lowCount
    }

    clear() {
        this.#items = {}
        this.#count = 0;
        this.#lowCount = 0
      
    }

    toString() {
        let str = ""
        for(let i =this.#lowCount;i<this.#count;i++){
            str += `${this.#items[i]} `
            }
        return str
    }
}
function game(list,num){
    let queue = new Queue()
    for(let i=0;i<list.length;i++){
        queue.enqueue(list[i])
    }

    while(queue.size()>1){
        for(let i=0;i<num;i++){
            queue.enqueue(queue.dequeue())
        }//dequeue()拿到的是它的返回值  这里表示删完了还要追加到队尾
        console.log(queue.dequeue(),"淘汰了")
    }

    return {
        winner:queue.dequeue()
    }
}

game(["甲","乙","丙","丁","小明"],7)
//循环七次这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃掉一直猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值