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-Mozilla和IE中的一个函数直接量的问题
Jan 09 Javascript
javascript smipleChart 简单图标类
Jan 12 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
Jan 26 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
Apr 16 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
javascript 跨域问题以及解决办法
Jul 17 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
vue实现动态按钮功能
May 13 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 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数组声明、遍历、数组全局变量使用小结
2013/06/05 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP数组操作类实例
2015/07/11 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
Python中类的初始化特殊方法
2017/12/01 Python
python调用百度语音REST API
2018/08/30 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
中学生差生评语
2014/01/30 职场文书
导师工作推荐信范文
2014/05/17 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
营业用房租赁协议书
2014/11/26 职场文书
村党组织公开承诺书
2015/04/30 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
详解MySQL 用户权限管理
2021/04/20 MySQL
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript