其他分享
首页 > 其他分享> > 队列应用-优先队列

队列应用-优先队列

作者:互联网

代码定义

/**
 * 优先级队列主要考虑的问题为:
 * 每个元素不再只是一个数据,还包含数据的优先级;
 * 在添加数据过程中,根据优先级放入到正确位置;
 */
// 封装优先级队列
function PriorityQueue() {
    // 封装属性
    this.items = []
    //内部类:在类里面再封装一个类;表示带优先级的数据
    QueueElement = function (element, priority) {
        this.element = element;
        this.priority = priority;
    }
    // 1.实现按照优先级插入方法
    PriorityQueue.prototype.enQueue = (element, priority) => {
        // 1.1.创建QueueElement对象
        let queueElement = new QueueElement(element, priority)
        // 如果优先队列为空,直接添加
        if (this.items.length == 0) {
            this.items.push(queueElement)
        } else {
            // 定义一个变量记录是否成功添加了新元素
            let added = false
            for (let i = 0; i < this.items.length; i++) {
                // 让新插入的元素与原有元素进行优先级比较(priority越小,优先级越大)
                if (queueElement.priority < this.items[i].priority) {
                    this.items.splice(i, 0, queueElement)
                    added = true
                    // 新元素已经找到插入位置了可以使用break停止循环
                    break
                } 
            }
             // 新元素没有成功插入,就把它放在队列的后边
                if (!added) {
                    this.items.push(queueElement)
                }
        }
    }
    // 2.dequeue():从队列中删除前端元素
    PriorityQueue.prototype.deQueue = () => {
        return this.items.shift()
    }
    // 3.front():查看前端的元素
    PriorityQueue.prototype.front = () => {
        return this.items[0]
    }

    // 4.isEmpty():查看队列是否为空
    PriorityQueue.prototype.isEmpty = () => {
        return this.items.length == 0;
    }

    // 5.size():查看队列中元素的个数
    PriorityQueue.prototype.size = () => {
        return this.items.length
    }

    // 6.toString():以字符串形式输出队列中的元素
    PriorityQueue.prototype.toString = () => {
        let resultString = ''
        for (let i of this.items) {
            resultString += i.element + '-' + i.priority + ' '
        }
        return resultString
    }
}
module.exports = PriorityQueue

测试代码

let PriorityQueue = require('./05优先队列')
let priorityQueue = new PriorityQueue
priorityQueue.enQueue('tom', 100)
priorityQueue.enQueue('alice', 120)
priorityQueue.enQueue('lxl',7)
priorityQueue.enQueue('hellen', 150)
priorityQueue.enQueue('mary', 80)
priorityQueue.enQueue('gogo', 12)
priorityQueue.enQueue('jim', 2)
priorityQueue.enQueue('jack', 17)
priorityQueue.enQueue('gtc', 1)
priorityQueue.enQueue('zlj', 19)
console.log(priorityQueue);

结果

标签:PriorityQueue,优先,队列,items,priorityQueue,enQueue,应用,priority
来源: https://www.cnblogs.com/NaziriteGTC/p/16417670.html