JavaScript实现优先级队列


Posted in Javascript onDecember 06, 2021

一、优先级队列介绍

我们知道,普通的队列插入一个元素,数据会被放在后端,并且需要前面所有的元素都处理完成后才会处理前面的数据。但是优先级队列,在插入一个元素的时候会考虑该数据的优先级,和其他数据的优先级进行比较。比较完成后,可以得出这个元素在队列中的正确位置,其他的处理方式,和基本队列的处理方式基本一样。

优先级队列主要考虑的问题:

  • 每个元素不再只是一个数据,而且包含数据的优先级;
  • 在添加方式中,根据优先级放入正确的位置。

在日常中也有用到优先级队列的例子,比如说医院的(急诊科)候诊室。医生会优先处理病情比较严重的患者。计算机中,我们也可以通过优先级队列来重新排列队列中任务的顺序.比如每个线程处理的任务重要性不同,我们可以通过优先级的大小,来决定该线程在队列中被处理的次序。

二、优先级队列封装

优先级队列的操作和队列的操作方法基本相同,但是插入操作有所不同,所以,我们这里主要是来实现优先级队列的插入操作

比如说我们现在要根据某个数据的优先级来插入元素,这里我们先创建一个类来封装优先级队列,并在其内部创建一个构造函数来保存元素的优先级和数据,再添加一个属性用于存放元素。

代码如下:

function PtiorityQueue(){
            var items = [];
            //封装一个新的构造函数,用于保存元素和元素的优先级
            function queueElement(element,priority){
                this.element = element;
                this.priority = priority;
            }
        }

创建完成后,在来实现其的插入操作:

  • 如果队列内部没有元素,则直接插入
  • 如果要插入的元素的优先级小于队列内部元素的优先级,则排序后插入。

具体实现代码如下:

function PtiorityQueue(){
   this.items = [];
    //封装一个新的构造函数,用于保存元素和元素的优先级
    function QueueElement(element,priority){
        this.element = element;
        this.priority = priority;
    }
     //1.实现插入方法
     PtiorityQueue.prototype.enqueue = function(element,priority){
        //1.创建queueElement对象
        var queueElement = new QueueElement(element,priority);
        //2.判断队列是否为空
        if(this.items.length == 0){
            this.items.push(queueElement);
        }else{
            var flag = false;
            for(var i =0;i<this.items.length;i++){
                if(queueElement.priority < this.items[i].priority){
                    this.items.splice(i,0,queueElement);
                    flag = true;
                    break;
                }
            }
            if(!flag){
                this.items.push(queueElement)
            }
        }
     }
}

输入测试数据为:

var pq = new PtiorityQueue();
        pq.enqueue('d',30)
        pq.enqueue('c',50)
        pq.enqueue('a',100)
        pq.enqueue('b',60)
        pq.enqueue('e',20)
        console.log(pq);

打印结果为:

JavaScript实现优先级队列

到此这篇关于JavaScript实现优先级队列的文章就介绍到这了,更多相关优先级队列内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JQuery 浮动导航栏实现代码
Aug 27 Javascript
学习面向对象之面向对象的术语
Nov 30 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
Mar 26 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
JavaScript实现二分查找实例代码
Feb 22 Javascript
vue router 配置路由的方法
Jul 26 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
Aug 22 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
微信小程序实现音频文件播放进度的实例代码
Mar 02 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
Apr 28 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 #Javascript
JavaScript执行机制详细介绍
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 #Vue.js
JavaScript 与 TypeScript之间的联系
JavaScript利用html5新方法操作元素类名详解
Nov 27 #Javascript
一文了解JavaScript用Element Traversal新属性遍历子元素
Nov 27 #Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 #Javascript
You might like
极典R601SW收音机
2021/03/02 无线电
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
实例解析php的数据类型
2018/10/24 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
Node.js编码规范
2014/07/14 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
canvas的神奇用法
2017/02/03 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
Python多线程爬虫简单示例
2016/03/04 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
塔吉特百货公司官网:Target
2017/04/27 全球购物
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
资料员的岗位职责
2013/11/20 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
离婚协议书格式
2014/11/21 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Python实现生活常识解答机器人
2021/06/28 Python