JS队列

作者: Delevent | 来源:发表于2020-04-30 15:43 被阅读0次

概念: 先进先出(FIFO)的数据接口

1. 代码实现队列Queue

function Queue() {
    var items = [];

    this.enqueue = function(element){
        items.push(element);
    };

    this.dequeue = function(){
        return items.shift();
    };

    this.front = function(){
        return items[0];
    };

    this.isEmpty = function(){
        return items.length == 0;
    };

    this.clear = function(){
        items = [];
    };

    this.size = function(){
        return items.length;
    };

    this.print = function(){
        console.log(items.toString());
    };
}

2. 优先队列

function PriorityQueue() {
    var items = [];

    function QueueElement (element, priority){
        this.element = element;
        this.priority = priority;
    }

    this.enqueue = function(element, priority){
        var queueElement = new QueueElement(element, priority);
        if (this.isEmpty()){
            items.push(queueElement);
        } else {
            var added = false;
            for (var i=0; i<items.length; i++){
                if (queueElement.priority < items[i].priority){
                    items.splice(i,0,queueElement);
                    added = true;
                    break;
                }
            }

            if (!added){
                items.push(queueElement);
            }
        }
    };

   //其他方法和默认的Queue实现相同
}

3. 循环队列--击鼓传花

function hotPotato (nameList, num){
    var queue = new Queue();
    for (var i=0; i<nameList.length; i++){
        queue.enqueue(nameList[i]);
    }

    var eliminated = '';
    while (queue.size() > 1){
        for (var i=0; i<num; i++){
            queue.enqueue(queue.dequeue());
        }
        eliminated = queue.dequeue();
        console.log(eliminated + '在击鼓传花游戏中被淘汰。');
    }
    return queue.dequeue();
}

摘录自 《学习JavaScript数据结构与算法》

相关文章

  • WebViewJavascriptBridge源码解读

    JS中维护一个消息队列 JS和Native都封装消息写到该队列,然后通知对方处理 JS注册Handler JS中维...

  • 关于宏任务微任务的题

    第一道题: 解析:js任务队列有两种,宏任务队列,微任务队列。js的事件循环调度的就是宏任务队列。一个宏任务执行完...

  • 前端异步的一些基本概念

    消息队列 settimeout是异步方法,会排到消息队列去执行,也就是执行异步方法的队列称为消息队列。 js多线程...

  • JS队列

    概念: 先进先出(FIFO)的数据接口 1. 代码实现队列Queue 2. 优先队列 3. 循环队列--击鼓传花 ...

  • 2018-08-01 js栈与队列补充

    栈与队列之js(ts)手写(补充)

  • js实现数据结构队列

    根据js Array实现简单的单向队列

  • 实现一个简单的js队列

    实现一个简单的js队列

  • 宏队列与微队列

    js执行时有两个异步队列:宏队列和微队列。优先执行微队列中的任务,而且每次执行完宏队列中的任务后,都会查看微队列中...

  • JS 异步之宏队列 与 微队列

    # 前言 JS 中用来存储待执行回调函数的队列包含 宏队列 和 微队列 宏队列:用来保存待执行的宏任务(回调),比...

  • 20211021

    1、js里的事件循环机制(event loop)答:js事件循环中有异步队列有两种:宏任务队列(macro)和微任...

网友评论

      本文标题:JS队列

      本文链接:https://www.haomeiwen.com/subject/jfazwhtx.html