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 相关文章推荐
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
js实现收缩菜单效果实例代码
Oct 30 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
jQuery中trigger()方法用法实例
Jan 19 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
Aug 13 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
详解webpack-dev-server的简单使用
Apr 02 Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 jQuery
js实现缓动动画
Nov 25 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
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python中的模块和包概念介绍
2015/04/13 Python
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python mysql断开重连的实现方法
2019/07/26 Python
python super的使用方法及实例详解
2019/09/25 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
销售总经理岗位职责
2014/03/15 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
感恩的心主题班会
2015/08/12 职场文书
学生会干部任命书
2015/09/21 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
MySQL基础(一)
2021/04/05 MySQL
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技