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更改class和id的方法
Oct 10 Javascript
javascript URL锚点取值方法
Feb 25 Javascript
JavaScript 监听textarea中按键事件
Oct 08 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
jQuery与Ajax以及序列化
Feb 01 Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 Javascript
详解React中的组件通信问题
Jul 31 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
微信小程序动态显示项目倒计时
Jun 20 Javascript
js类的继承定义与用法分析
Jun 21 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
elementUI同一页面展示多个Dialog的实现
Nov 19 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中for循环语句的几种变型
2007/03/16 PHP
PHP 处理图片的类实现代码
2009/10/23 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
从javascript语言本身谈项目实战
2006/12/27 Javascript
jquery 插件 人性化的消息显示
2008/01/21 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
python实现单向链表详解
2018/02/08 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
简单了解python单例模式的几种写法
2019/07/01 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
大学生职业生涯规划书
2014/03/14 职场文书
高中家长意见怎么写
2015/06/03 职场文书
OpenCV实现反阈值二值化
2021/11/17 Java/Android
Golang日志包的使用
2022/04/20 Golang
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android