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 相关文章推荐
js 提交和设置表单的值
Dec 19 Javascript
Cookie 小记
Apr 01 Javascript
Javascript 面向对象 继承
May 13 Javascript
jquery下将选择的checkbox的id组成字符串的方法
Nov 28 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
Apr 14 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
Oct 28 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
Feb 02 Javascript
JS实现京东商品分类侧边栏
Dec 11 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
星际RPG字典
2020/03/04 星际争霸
php中var_export与var_dump的区别分析
2010/08/21 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
浅析PHP开发规范
2018/02/05 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
Python入门之后再看点什么好?
2018/03/05 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
2014年服务员工作总结
2014/11/18 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python