数构学习之队列

86 阅读1分钟

封装队列

function Queue () {
    // 属性
    this.items = []

    // 方法
        //1.enqueue():将元素加入到队列中,并返回添加元素后的数组队列
        Queue.prototype.enqueue = element => {
            this.items.push(element)
            return this.items
        }

        // 2.dequeue():从队列中删除前端元素
        Queue.prototype.dequeue = () =>{
            // let element = this.items[0]
            return this.items.shift()
            // return element
        }

        // 3.front():返回队列中的第一个元素---最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与Stack类的peek方法非常类似)
        Queue.prototype.front = () => {
            return this.items[0]
        }

        // 4.isEmpty():如果队列中不包含任何元素,返回true,否则返回false
        Queue.prototype.isEmpty = () => {
            //return this.items.length == 0 ? 'true' : 'false'
            return this.items.length == 0 
        }

        // 5.size():返回队列包含的元素个数,与数组的length属性类似
        Queue.prototype.size = () => {
            return this.items.length
        }

        // 6.toString():将队列中的内容,转成字符串形式
        Queue.prototype.toString = () => {
            let resultString = ''
            this.items.forEach((item) => {
                resultString += item
            })
            return resultString
        }
}

击鼓传花游戏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="Queue.js"></script>
    <script>
        let passGame = (numList,num) => {
            // 将所有元素入队列中
            let queue = new Queue()
            numList.forEach(element => {
                queue.enqueue(element)
            });
            // 每次对比队头元素是否为设定的数字,若是则删除该元素,若不是则跳过
            // while(queue.size() > 0){
            //     // 是该元素则将该首元素入一次队列并删除该首元素
            //     if(queue.front() == num){
            //         queue.dequeue()
            //     } else {
            //         queue.enqueue(queue.front())
            //         queue.dequeue()
            //     }
            // }
            // return queue
            while(queue.size > 1){
                for(let i = 0;i < num -1;i++){
                    queue.enqueue(queue.dequeue())
                }
                queue.dequeue()
            }
            return queue.front()
        }
        let arry = [0,1,2,3,4,5,6,7,8,9]
        console.log(passGame(arry,1))
    </script>
</body>
</html>