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操作table示例(个人心得)
Nov 29 Javascript
js读取配置文件自写
Feb 11 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
Nov 07 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
jQuery qrcode生成二维码的方法
Apr 03 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
ES6中Math对象新增的方法实例详解
Apr 25 Javascript
微信小程序开发中的疑问解答汇总
Jul 03 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
详解Vue的异步更新实现原理
Dec 22 Vue.js
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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php统计数组元素个数的方法
2015/07/02 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
three.js 入门案例详解
2018/01/23 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
python实现批量注册网站用户的示例
2019/02/22 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
Python使用tkinter实现小时钟效果
2021/02/22 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
企业厂长岗位职责
2013/12/17 职场文书
小学科学教学反思
2014/01/26 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
2015年市场部工作总结
2015/04/30 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
详解OpenCV曝光融合
2022/04/29 Python