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 使用个人心得
Feb 26 Javascript
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
JS实现一键回顶功能示例代码
Oct 28 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
Apr 18 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
vuejs2.0子组件改变父组件的数据实例
May 10 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
Jul 02 Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP 引用文件技巧
2010/03/02 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
《最可爱的人》教学反思
2014/02/14 职场文书
大学军训感言300字
2014/03/09 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
开学第一周总结
2015/07/16 职场文书
青年教师听课心得体会
2016/01/15 职场文书