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 相关文章推荐
jQuery实现瀑布流布局
Dec 12 Javascript
javascript表格的渲染组件
Jul 03 Javascript
js判断浏览器类型及设备(移动页面开发)
Jul 30 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 Javascript
JavaScript与java语言有什么不同
Sep 22 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
Aug 27 Javascript
微信小程序 用户数据解密详细介绍
Jan 09 Javascript
vue项目中axios使用详解
Feb 07 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
vue webpack重写cookie路径的方法
Jul 10 Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 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自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
个人简历自我评价八例
2013/10/31 职场文书
绝对经典成功的大学生推荐信
2013/11/08 职场文书
函授自我鉴定范文
2014/02/06 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
安全员岗位职责
2015/02/10 职场文书
工作感言一句话
2015/08/01 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
Python编写冷笑话生成器
2022/04/20 Python
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers