普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。它的一个数据项里面包含优先级和数据。
封装优先队列的代码实现:
function PriorityQueue() {
//在PriorityQueue里面创建了一个新的对象,可以理解为内部类
function QueueEle(ele,priority) { //在每次创建的时候要传入数据和优先级
this.ele = ele;
this.priority = priority;
}
//封装属性
this.items = [];
//实现插入方法
PriorityQueue.prototype.enqueue = function (ele,priority) {
//1.创建QueueEle对象
let queueElement = new QueueEle(ele,priority);
//2.判断队列是否为空
if(this.items.length === 0){
//2.1直接放入
this.items.push(queueElement);
}else{
//2.2根据优先级进行插入操作
let added = false;
for(let i=0;i<this.items.length;i++){
if(queueElement.priority < this.items[i].priority){
this.items.splice(i,0,queueElement); //从下标为i处,插入一个新的数据
added = true;
break;
}
}
//直接在最后放入
if(!added){
this.items.push(queueElement);
}
}
};
//移除队列中的第一项
PriorityQueue.prototype.dequeue = function () {
return this.items.shift()
};
//返回队列前端的元素
PriorityQueue.prototype.front = function () {
return this.items[0];
};
//判断队列是否为空
PriorityQueue.prototype.isEmpty = function () {
return this.items.length === 0;
};
//返回队列中的元素个数
PriorityQueue.prototype.size = function () {
return this.items.length;
};
//将队列中的内容转换成字符串形式
PriorityQueue.prototype.toString = function () {
let resultString = '';
for(let i=0;i<this.items.length;i++){
resultString += this.items[i].ele + '-'+ this.items[i].priority +" ";
}
return resultString;
}
}