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 相关文章推荐
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
JS 作用域与作用域链详解
Apr 07 Javascript
javascript设计模式--策略模式之输入验证
Nov 27 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
vue结合axios与后端进行ajax交互的方法
Jul 06 Javascript
vue+element-ui+axios实现图片上传
Aug 20 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
JavaScript布尔运算符原理使用解析
May 06 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中基本符号及使用方法
2010/03/23 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
jquery trim() 功能源代码
2011/02/14 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
Python中函数的用法实例教程
2014/09/08 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
详解python3中tkinter知识点
2018/06/21 Python
10款最好的Python开发编辑器
2019/07/03 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python实现疫情地图可视化
2021/02/05 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
保荐人的岗位职责
2013/11/19 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
草房子读书笔记
2015/06/29 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
Win11开始菜单添加休眠选项
2022/04/19 数码科技
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技