优先级队列(队列的应用)

<script>
        class Queue {
            constructor(){
                this.items = []
            }
            enqueue(item){
                this.items.push(item)
            }
            dequeue(){
                return this.items.shift()
            }
            size(){
                if(this.isEmpty()) return null
                return  this.items.length
            }
            isEmpty(){
                return this.items.length === 0
            }
        }

        class QueueElement{
            constructor(element, priority){
                this.element = element
                this.priority = priority
            }
        }

        class PriorityQueue extends Queue{
            enqueue(element, priority){
                // 1.创建queueElement对象
                const queueElement = new QueueElement(element, priority)
                //2. 考虑如何插入新对象
                if(this.isEmpty()){
                    this.items.push(queueElement)
                }else{
                    let added = false
                    for(let i = 0; i < this.items.length; i++){
                        if(this.items[i].priority > queueElement.priority){
                            this.items.splice(i, 0, queueElement)
                            added =  true
                            break
                        }
                    }
                    if(!added){
                        this.items.push(queueElement)
                    }
                }
            }
        }

        const queue = new PriorityQueue()
        queue.enqueue('a',1)
        queue.enqueue('b',5)
        queue.enqueue('c',4)
        queue.enqueue('d',3)
        queue.items.forEach(item => {
            console.log(item.element, item.priority)
        })
    </script>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值