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倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
使用js 设置url参数
Jul 08 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
JavaScript实现MIPS乘法模拟的方法
Apr 17 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
DWR中各种java方法的调用
May 04 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
Bootstrap整体框架之JavaScript插件架构
Dec 15 Javascript
JS实现HTML标签转义及反转义
Apr 14 Javascript
js实现1,2,3,5数字按照概率生成
Sep 12 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
JS立即执行的匿名函数用法分析
Nov 04 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
学习使用curl采集curl使用方法
2012/01/11 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javascript时区函数介绍
2012/09/14 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
angular4自定义组件详解
2017/09/28 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
javascript中UMD规范的代码推演
2018/08/29 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
Python字符串切片操作知识详解
2016/03/28 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
俄语地区最大的中国商品在线购物网站之一:Umka Mall
2019/11/03 全球购物
一套SQL笔试题
2016/08/14 面试题
培训演讲稿范文
2014/01/12 职场文书
党员一帮一活动总结
2014/07/08 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
自荐信模板大全
2015/03/27 职场文书