队列学习

//队列结构: 受限的线性结构,尊从先进先出的原则。只允许从表的前端进行删除操作,从表的后端进行插入操作
// 队列的封装
class Queue {
    constructor() {
        this.items=[]
    }
    // 1.向队列尾部添加一个新的项
    enqueue(element) {
        this.items.push(element)
    }
    // 2.移除队列第一项,并返回第一项
    dequeue() {
        return this.items.shift()
    }
    // 3.返回队列中第一项
    front() {
        return this.items[0]
    }
    // 4.判断队列中是否为空
    isEmpty() {
        return this.items.length === 0
    }
    // 5.获取队列中元素个数
    size() {
        return this.items.length
    }
    // 6.toString
    toString() {
        return this.items.join(' ')
    }
}

// 队列应用
//几个人围成一圈,开始数数,数到某个数的人自动淘汰,然后下一个人从头开始数,依次类推
// 最后剩下的人在原来的什么位置

function startGame(people,num) {
    var queue= new Queue();
    // people 中所有的元素 放入队列中
    [].forEach.call(people,item=>{
        queue.enqueue(item)
    })
    while (queue.size()>1) { // 一直到队列中只有一个人为止
        //从一开始报数,到num-1
        for(var i=1;i<num-1;i++) {
            queue.enqueue(queue.dequeue())
        }
        // 到num 队列中删除当前报数人
        queue.dequeue()
    }
    // 最后剩下的人
    let last= queue.front();
    // 返回下标
    return [].indexOf.call(people,last)
}

 

posted @ 2020-03-02 13:30  有点油  阅读(110)  评论(0编辑  收藏  举报