用js实现个优先队列吧

Posted 鲁小肃

tags:

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

队列是一种很常用的数据结构,它是一组遵循先进先出(FIFO)规则的项。在现实生活中,最常见的队列的例子就是排队。队列有一些方法,入队、出队、队列的长度,清空队列等。用js实现一个普通的队列代码如下:

 function Queue() {
            var queue = [];
            // 队列元素个数
            this.size = function () {
                return queue.length;
            };
            // 入队
            this.enqueue = function (item) {
                queue.push(item);
            };
            // 出队
            this.dequeue = function () {
                queue.shift();
            };
            // 队列是否为空
            this.isEmpty = function () {
                return !queue.length;
            };
            // 队列第一个元素
            this.front = function () {
                return queue[0];
            };
            // 清空队列
            this.clear = function () {
                queue = [];
            }
        }

如果是优先队列,其实就是 给每个需要排队的元素加个优先级,优先级高的在前面,优先级低的就只好在后面了。队列的其他方法不变,只是入队的方法变了,需要根据元素的优先级排队,实现代码如下:

        function PriorityQueue() {
            var queue = [];
            this.enqueue = function (item) {
                if (this.isEmpty()) {
                    queue.push(item);
                } else {
                    var flag = false; //判断是否排队
                    for (let i = queue.length - 1; i > 0; i--) {
                        if (queue[i].priority <= item.priority) {
                            queue.splice(i, 0, item);
                            flag = true;
                            break;
                        }
                    }
                    // 循环后未入队,优先级最大,插入到第一位
                    if (!flag) {
                        queue.unshift(item);
                    }
                }
            };

 

以上是关于用js实现个优先队列吧的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

队列的JS实现及广度优先搜索(BFS)的实现

HDU 6301 (贪心+优先队列)

数据结构 ---[实现 堆(heap)(包含方法图解过程) 优先队列(Priority Queue)]

优先队列实现dijkstra算法C++代码

基于最大堆实现最大优先队列代码