优先级队列(JS实现)

一、关于优先级队列的理解

1.1相关概念

  • 1.1优先级队列再插入元素之前必须考虑元素的优先级,将于其他元素的优先级进行比较,然后放在正确的位置

1.2优先级队列和普通队列的对比:

  • 1.2.1每个元素不再只是一个数据,还有数据的优先级(比如坐飞机时,还需要登机牌来区别经济舱和商务舱)
  • 1.2.2根据优先级放入队列中的正确位置(根据经济舱和商务舱来确定登机顺序)

1.3优先级队列在各个领域的应用

  • 1.3.1在医院,医生先处理病情严重的病人,当然一般情况下
  • 1.3.2在计算中每个线程处理的任务重要性不同,我们可以通过优先级的大小,来决定该线程在队列中处理的次序

二、优先级队列的实现

2.1实现原理

  • 2.1.1根据上文中,与普通队列的对比,在封装队列的同时,要将优先级和数据封装在一起
  • 2.1.2在插入元素的时候,必须将插入元素的优先级和队列中元素的优先级进行对比,得到该元素应该出现的位置

2.2图解

2.2.1待插入元素和队列中所有元素逐一遍历

2.2.1分别插入

 

 2.3代码

<script>
        function PriorityQeue(){
//封装队列中的单个节点/单个元素
function QueueElement(element,proiority){
this.element=element;
this.proiority=proiority
            }
//还是基于数组实现
this.items=[]
//插入操作
PriorityQeue.prototype.enqueue=function(element,proiority){
    //创建QueueElment对象
    var queueElement=new QueueElement(  element,proiority)
    //判断队列是否为空
    if(this.items.length==0){
        this.items.push(queueElement)
    }else{
        //设置变量控制插入位置
        var added=false
        if(queueElement.proiority<this.items[i.proiority]){
            this.items.splice(i,0,queueElement)
            added=true
            break
        }
        //当并没有在中间位置添加元素,则added没有变化,直接将元素插入队列后面
        if(!added){
            this.items.push(queueElement)
        }
    }
}
  //删除前端元素
  Queue.prototype.deqeue=function(){
        return this.items.shift()}
    //查看前端元素
    Queue.prototype.front =function(){
        return this.items[0];
    }
    //查看前端元素是否为空
    Queue.prototype.isEmpty  =function()   {
        return this.items.length==0;
    
    }
     //查看队列元素的个数
     Queue.prototype.size=function(){
         return this.items.length
    
     }
        }
    </script>

总结:注意封装单个节点的操作,在其他数据结构实现过程中,也经常用到

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>