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 相关文章推荐
js可突破windows弹退效果代码
Aug 09 Javascript
javascript权威指南 学习笔记之javascript数据类型
Sep 24 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
Feb 25 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
十大热门的JavaScript框架和库
Mar 21 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
在一个页面实现两个zTree联动的方法
Dec 20 Javascript
Vue实现active点击切换方法
Mar 16 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
Oct 09 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企业级应用之常见缓存技术篇
2011/01/27 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
jQuery 动态酷效果实现总结
2009/12/27 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jquery map方法使用示例
2014/04/23 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
浅析Python 多行匹配模式
2020/07/24 Python
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
班组长岗位职责范本
2014/01/05 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
洗发露广告词
2014/03/14 职场文书
银行转正自我鉴定
2014/09/29 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书