利用JS实现优先级队列

        众所周知,队列中元素遵循先进先出的原则;但优先级队列在此基础上,还需要考虑“优先级高的元素排在前面”这一规则;而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();

结果为:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值