前端仔之理解数据结构三 优先队列

书接上文

        我们知道上篇中 《前端仔之理解数据结构二 队列》中有说道:普通队列在插入一个元素时,数据会被放在队列的后端(rear),这就是我们说的(last in)  并且需在前面所有元素都处理完成之后才会处理新插入的数据(first out);

优先队列的特点

        它和普通队列不一样 没在插入的时候都会考虑数据的优先级,更具优先级给他排队处理。
        所以在插入的时候会考虑优先级。

        每个元素现在不仅是一个数据了 而包含了优先级。

        在添加过程中我们就要更具优先级放入正确的位置了


在此献丑啦上代码

//这是一个普通的队列容器      
class Queue {
    constructor() {
        this.container = []
    }
    // 插入操作 向尾部添加一个或者多个新的项目
    enqueue(element) {
        this.container.push(element)
    }
    // 删除操作 移除队列的第一个项 并返回被移除元素
    dequeue() {
        return this.container.shift()
    }
    // 返回队列中的第一个元素————类似于stack 的peek
    front() {
        return this.container[0]
    }
    // 判断是否为空
    isEmpty() {
        return this.container.length == 0
    }
    // 返回队列的大小
    size() {
        return this.container.length
    }
    // 将队列中的内容转换成字符串的形式
    toString() {
        let str = ""
        for (let i = 0; i < this.container.length; i++) {
            str += this.container[i] + " "
        }

        return str;
    }
}

//这里是优先队列的节点对象
 class QueueElement {
       constructor(element, priority) {
           // 创建QueueElement对象
           this.element = element
           this.priority = priority
       }
}

//这里我们就来定义一下优先队列拉
class PriorityQueue extends Queue{
    //定义插入方法  方法重写
    enqueue(element,priority){
        //作为内部类使用
        const queueElement = new QueueElement(element,priority);
        if(this.isEmpty()){
            this.container.push(queueElement);
        }else{
            let added = false;
            for(let i=0;i<this.container.length;i++){
               if(this.container[i].priority > queueElement.priority){
                 this.container.splice(i,0,queueElement);
                 added = true;
                 break;
               }
            }

            if(!added){
               this.container.push(queueElement);
            }
        }
    }
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值