优先级队列封装

Posted jwzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先级队列封装相关的知识,希望对你有一定的参考价值。

// 封装优先级队列
        function PriorityQueue() {
            function QueueElement(element, priority) {
                this.element = element
                this.priority = priority
            }
            // 封装属性
            this.items = []
            //1. 实现插入方法
            PriorityQueue.prototype.enqueue = function (element, priority) {
                // 1.创建QueueElement对象
                let queueElement = new QueueElement(element, priority)
                // 2.判断队列是否为空
                console.log(this.items)
                if (this.items.length == 0) {
                    this.items.push(queueElement)
                } else {
                    let added = false
                    for (let i = 0; i < this.items.length; i++) {
                        if (queueElement.priority < this.items[i].priority) {
                            this.items.splice(i, 0, queueElement)
                            console.log(this.items)
                            added = true
                            break
                        }
                    }
                    if (!added) {
                        this.items.push(queueElement)
                    }
                }
            }
            //2. 从队列中删除前元素
            PriorityQueue.prototype.dequeue = ((element, priority) => {
                return this.items.shift()
            })
            //3. //3.查看前端的元素
            PriorityQueue.prototype.front = () => {
                return this.items[0];
            }
            //4.查看队列是否为空
            PriorityQueue.prototype.isEmpty = () => {
                return this.items.length == 0;
            }
            //5.查看队列中的元素个数
            PriorityQueue.prototype.size = () => {
                return this.items.length;
            }
            //6.toString方法
            PriorityQueue.prototype.toString = () => {
                let getString = "";
                for (let i = 0; i < this.items.length; i++) {
                    getString += this.items[i].element + " ";
                }
                return getString;
            }
        }
        // 测试代码
        let pq = new PriorityQueue()
        pq.enqueue("a", 1)
        pq.enqueue("b", 3)
        pq.enqueue("c", 2)
        console.log(pq.items)

 

以上是关于优先级队列封装的主要内容,如果未能解决你的问题,请参考以下文章

优先级队列封装

优先级队列封装

NoHttp封装--06 NoHttp之队列队列优先级

golang基于redis lua封装的优先级去重队列

自己封装的优先队列,堆实现

堆和优先级队列2:java实现堆和优先级队列