队列(基于数组)

本文介绍了如何使用JavaScript自定义队列,包括enqueue、dequeue、front等方法,并通过击鼓传花游戏示例展示了队列在实际场景中的应用。
摘要由CSDN通过智能技术生成

先进先出   只能在前端进行删除操作在后端进行插入操作

队列封装

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 自定义队列
    function Queue() {
        var items = []

        // 队列操作的方法
        // enter queue方法
        this.enqueue = function (element) {
            items.push(element)
        }

        // delete queue方法
        this.dequeue = function () {
            return items.shift()
        }

        // 查看前端的元素
        this.front = function () {
            return items[0]
        }

        // 查看队列是否为空
        this.isEmpty = function () {
            return items.length == 0
        }

        // 查看队列中元素的个数
        this.size = function () {
            return items.length
        }
    }

    // 创建队列对象
    var queue = new Queue()

    // 在队列中添加元素
    queue.enqueue("abc")
    queue.enqueue("cba")
    queue.enqueue("nba")

    // 查看一下队列前端元素
    alert(queue.front())

    // 查看队列是否为空和元素个数
    alert(queue.isEmpty())
    alert(queue.size())

    // 从队列中删除元素
    alert(queue.dequeue())
    alert(queue.dequeue())
    alert(queue.dequeue())

</script>
</body>
</html>

队列的应用(击鼓传花)

<!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>队列</title>
    <script type="text/javascript">
        function Queue() {
            //1.添加数组
            this.items = [];
            //2.添加元素
            Queue.prototype.enqueue = function (element) {
                this.items.push(element)
            }
            //3.删除元素
            Queue.prototype.dequeue = function () {
                return this.items.shift()
            }
            //4.查看第一个元素
            Queue.prototype.front = function () {
                return this.items[0];
            }
            //5.判断队列是否为空
            Queue.prototype.isEmpty = function () {
                return this.items.length == 0;
            }
            //6.查看元素个数
            Queue.prototype.size = function () {
                return this.items.length;
            }
            //7.队列内容转换成字符串形式
            Queue.prototype.toString = function () {
                var resultstring = ""
                for (var i = 0; i < this.items.length; i++) {
                    resultstring = resultstring + this.items[i] + ' '
                }
                return resultstring;
            }

        }
        var duilie = new Queue();


        /*duilie.enqueue("赵四")
        duilie.enqueue("刘能")
        duilie.enqueue("广坤")
        duilie.enqueue("老七")
        console.log(duilie)
    
        duilie.dequeue()
        console.log(duilie)
    
        alert(duilie.front())
    
        alert(duilie.isEmpty());
    
        alert(duilie.size())
    
        document.write(duilie.toString())*/


        function passgame(namelist, num) {
            //1.创建队列
            var queue = new Queue()
            //2.放人
            for (var i = 0; i < namelist.length; i++) {
                queue.enqueue(namelist[i]);
            }
            //3.不是num的队列删除重新队尾添加
            //是num直接删除
            //num之前的被重新添加,num直接淘汰
            while (queue.size() > 1) {
                for (var i = 0; i < num - 1; i++) {
                    queue.enqueue(queue.dequeue())
                }
                queue.dequeue()
            }

            //4.查看最后一个人;
            alert(queue.size());
            //最后那个人的名字
            var endname = queue.front()
            alert("最后那个人的名字 :" + endname)
            //查看下标值
            alert(namelist.indexOf(endname))

        }
        namelist = ["tom", "jarry", "susan", "赵四"]
        passgame(namelist, 3)
    </script>
</head>

<body>

</body>

</html>

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值