一、关于优先级队列的理解
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>
总结:注意封装单个节点的操作,在其他数据结构实现过程中,也经常用到