JavaScript 优先队列

简介: JavaScript 优先队列
优先队列,实现方法有两种:设置优先级,然后再正确的位置添加元素;入列操作添加元素,然后按照优先级移除。 此处使用第一种方法。对数组或队列不熟悉的同学请移步。




JavaScript 数组

JavaScript 队列






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
        //否则 去找一个比要添加元素的优先级更低(priority值更大)的元素,就把新元素插入到它之前。优先级相同,先进先出
        {
            var added = false;
            for (var i = 0; i < items.length; i++) {
                if (queueElement.priority < items[i].priority) {
                    items.splice(i, 0, queueElement); //splice 是数组方法
                    added = true;
                    break; //添加之后跳出循环
                }
            }
            //如果要添加的priority的值大于任何以有元素,直接添加在末尾即可
            if (!added) {
                items.push(queueElement);
            }
        }
    }

    //删除队列头部第一个元素
    this.dequeue = function () {
        return items.shift();
    }

    //返回队列中第一个元素
    this.front = function () {
        return items[0];
    }

    //确定元素是否为空 为空则为true 不为空则为false
    this.isEmpty = function () {
        return items.length === 0;
    }

    //返回队列长度
    this.size = function () {
        return items.length;
    }

    //打印队列
    this.print = function () {
        console.log(items)
        
        for (var i = 0; i < items.length; i++) {
            console.log(items[i].element)
        }
    }
}



定义好优先队列之后,我们开始使用:


//赵钱孙李,周吴郑王。冯陈诸卫,蒋沈韩杨。
var pq = new priorityQueue();

pq.enqueue('周', 2);
pq.enqueue('吴', 2);
pq.enqueue('郑', 2);
pq.enqueue('王', 2);

pq.enqueue('赵', 1);
pq.enqueue('钱', 1);
pq.enqueue('孙', 1);
pq.enqueue('李', 1);

pq.enqueue('将', 4);
pq.enqueue('沈', 4);
pq.enqueue('韩', 4);
pq.enqueue('杨', 4);

pq.enqueue('冯', 3);
pq.enqueue('陈', 4);
pq.enqueue('诸', 4);
pq.enqueue('卫', 4);

pq.print();
pq.size();

打印结果如下:

f4e4b9d09ef2232651b80de412fe7102ef4d7f92


这里的长度没有打印出来,但是放在print()方法中,就能打印出长度。在这里报了个错,哪位大神看到了能讲解一下哇55.gif


a00e719ac5749bee1b5e5ed7af94cc32b545a6c6



JavaScript 数组

JavaScript 队列





附上我的微信平台22.gif

不喜勿喷哈

6efab1869072f77cc579de71871a9af95bee2342


目录
相关文章
|
JavaScript 前端开发
javascript 之优先队列
javascript 之优先队列
87 0
|
JavaScript 前端开发
javascript实现优先队列
1.概念     一般情况下从队列中删除元素,都是率先入队的元素。但是有些使用队列的情况不遵循先进先出的原则,这就是插队,这需要使用优选队列的数据结构来进行描述。     从优先队列中删除元素的时候,需要考虑优先级的限制。
861 0
|
JavaScript 前端开发
javascript的队列,优先队列,循环队列
按书上的来弄的。慢慢理解了。 function Queue() { var items = []; this.enqueue = function(element){ items.
922 0
|
2月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
27 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
77 0
|
3天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
11 1
|
11天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
JavaScript
Vue.js学习详细课程系列--共32节(4 / 6)
Vue.js学习详细课程系列--共32节(4 / 6)
35 0
|
1月前
|
前端开发 搜索推荐 JavaScript
编程笔记 html5&css&js 001 学习编程从网页开始
编程笔记 html5&css&js 001 学习编程从网页开始