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 相关文章推荐
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 Javascript
JavaScript中获取样式的原生方法小结
Oct 08 Javascript
在JavaScript中处理时间之getHours()方法的使用
Jun 10 Javascript
Bootstrap零基础入门教程(二)
Jul 18 Javascript
Bootstrap选项卡动态切换效果
Nov 28 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
Sep 28 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
利用js canvas实现五子棋游戏
Oct 11 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 生成短网址原理及代码
2014/01/23 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
javascript静态的url如何传递
2007/05/03 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
Python实现的计数排序算法示例
2017/11/29 Python
Python学习pygal绘制线图代码分享
2017/12/09 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
django下创建多个app并设置urls方法
2020/08/02 Python
利用python汇总统计多张Excel
2020/09/22 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
HTML5拖拉上传文件的简单实例
2017/01/11 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
人力资源主管的岗位职责
2014/03/15 职场文书
授权委托书样本
2014/04/03 职场文书
公司委托书范本5篇
2014/09/20 职场文书
2015年教师党员承诺书
2015/04/27 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
环境卫生标语
2015/08/03 职场文书
Nginx配置https的实现
2021/11/27 Servers