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 相关文章推荐
arguments对象
Nov 20 Javascript
javascript 动态修改样式和层叠样式表代码
Apr 27 Javascript
单击某一段文字改写文本颜色
Jun 06 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
js仿iphone秒表功能 计算平均数
Jan 11 Javascript
Angularjs验证用户输入的字符串是否为日期时间
Jun 01 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
详解基于mpvue的小程序markdown适配解决方案
May 08 Javascript
关于RxJS Subject的学习笔记
Dec 05 Javascript
深入学习js函数的隐式参数 arguments 和 this
Jun 24 Javascript
小程序实现左滑删除效果
Jul 25 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 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
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php mail to 配置详解
2014/01/16 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
python实现简单的学生管理系统
2021/02/22 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
值传递还是引用传递
2015/02/08 面试题
幼儿师范毕业生自荐信
2013/11/09 职场文书
妇女工作先进事迹
2014/08/17 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python