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 相关文章推荐
使用prototype.js 的时候应该特别注意的几个问题.
Apr 12 Javascript
jquery 指南/入门基础
Nov 30 Javascript
js 页面关闭前的出现提示的实现代码
May 25 Javascript
浅析javascript 定时器
Dec 23 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
Jun 19 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 Javascript
js实现显示手机号码效果
Mar 09 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
Apr 06 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
原生JS无缝滑动轮播图
Oct 22 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
python实现探测socket和web服务示例
2014/03/28 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
python中os模块详解
2016/10/14 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
八年级美术教学反思
2014/02/02 职场文书
农业生产宣传标语
2014/10/08 职场文书
患者身份识别制度
2015/08/06 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python