JavaScript数据结构 ---- 优先级队列

优先级队列特点

  • 每个元素不再只是一个数据,而且包含数据的优先级
  • 在添加方式中,根据优先级放入正确的位置

封装优先级队列

  function PriorityQueue() {

            function QueueElement(element, priority) {
                this.element = element;
                this.priority = priority;
            }
            //封装属性
            this.items = [];

            //实现插入方法
            PriorityQueue.prototype.enqueue = function (element, priority) {
                //创建QueueElement对象
                var queueElement = new QueueElement(element, priority);
                //判断队列是否为空
                if (this.items.length == 0) {
                    this.items.push(queueElement);
                } else {
                    var added = false;
                    for (var i = 0; i < this.items.length; i++) {
                        if (queueElement.priority < this.items[i].priority) {
                            this.items.splice(i, 0, queueElement);
                            added = true;
                            break;
                        }
                    }
                    if (!added) {
                        this.items.push(queueElement);
                    }
                }
            }

            PriorityQueue.prototype.dequeue = function (element) {
                //使用js中的shift方法,移除第一个元素
                return this.items.shift();
            }
            PriorityQueue.prototype.front = function (element) {
                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] += " ";
                }
                return resultString;
            }
        }


测试

        //测试代码
        var pq = new PriorityQueue();
        pq.enqueue('a', 111);
        pq.enqueue('b', 22);
        pq.enqueue('c', 333);
        pq.enqueue('d', 44);
        console.log(pq);
// PriorityQueue {items: Array(4)}
// items: Array(4)
// 0: QueueElement {element: "b", priority: 22}
// 1: QueueElement {element: "d", priority: 44}
// 2: QueueElement {element: "a", priority: 111}
// 3: QueueElement {element: "c", priority: 333}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值