众所周知,队列中元素遵循先进先出的原则;但优先级队列在此基础上,还需要考虑“优先级高的元素排在前面”这一规则;而javascript中,由于.splice()方法的存在,使向数组中插入元素变得简单;
整体思路
先创建一个用于存放优先级队列的空数组list,再建立一个类p_dl,其中包含1.向优先级队列插入数据方法函数2.展示优先级队列方法函数;
在插入数据函数中,建立一个类Priority临时存放使用此函数传入的数据与其优先级;接着判断list长度,如果list长度为0,则直接将此数据类push进list中,不为0,则利用循环语句判断当前优先级是否高于存放在list中数据的优先级,如果高于,利用.splice()方法将类Priority插入到被比较数据前侧,否侧在循环结束后,直接push进list,最后在使用show()函数输出list
代码实现
var list = [];
//向优先级队列插入数据方法函数
var p_dl = {
into: function (num, priority) {
var flag = 0;
//临时存入数据与优先级
var Priority = {
p_num: num,
p_priority: priority
}
//判断是否为首个存入的数据
if (list.length == 0) {
list.push(Priority);
}
else {
for (var i = 0; i < list.length; i++) {
if (Priority.p_priority < list[i].p_priority) {
//将当前数据插入到被比较的数据之前
list.splice(i, 0, Priority);
flag = 1;
break;
}
}
//判断是否循环进行到结尾仍未插入数据
if (flag == 0) {
list.push(Priority);
}
}
},
//展示优先级队列方法函数
show:function(){
var str="";
for(var i=0;i<list.length;i++){
str += (list[i].p_num+","+list[i].p_priority+" ");
}
console.log(str);
}
}
插入不同优先级的数据:
p_dl.into("5asd", 4);
p_dl.into("56zxc", 2);
p_dl.into(55, 2);
p_dl.into(580, 2);
p_dl.into(555, 1);
p_dl.into(23, 9);
p_dl.show();
结果为: