ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

队列应用-优先队列

2022-06-27 22:02:56  阅读:143  来源: 互联网

标签:PriorityQueue 优先 队列 items priorityQueue enQueue 应用 priority


代码定义

/**
 * 优先级队列主要考虑的问题为:
 * 每个元素不再只是一个数据,还包含数据的优先级;
 * 在添加数据过程中,根据优先级放入到正确位置;
 */
// 封装优先级队列
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有