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 相关文章推荐
cument.execCommand()用法深入理解
Dec 04 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
使用Angular.js实现简单的购物车功能
Nov 21 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
详解Vue.js分发之作用域槽
Jun 13 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
JavaScript常用内置对象用法分析
Jul 09 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 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 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php获取根域名方法汇总
2014/10/28 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
基于node.js的快速开发透明代理
2010/12/25 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
2014/05/05 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
Python安装第三方库的3种方法
2015/06/21 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
测量实习生自我鉴定
2013/09/19 职场文书
会计专业的自荐信
2013/12/12 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript