JS中优先级队列实现

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>优先级队列</title>
</head>
<body>
    <script>
        //封装优先级队列
        function PriorityQueue(){
            //在PriorityQueue里重新创建一个类,可以理解为内部类

            function QueueElement(element,priority){

                this.element=element;
                this.priority =priority;

            }

            //封装属性
            this.items = [];

            //实现插入方法
            PriorityQueue.prototype.enqueue = function(element,priority){
                //1.创造QueueElement 对象
                var queueElement = new QueueElement(element,priority)

                //2.判断队列是否为空
                if(this.items.length===0){
                    this.items.push(queueElement)
                }

                else {
                    var added = false;

                    for(var i=0; i< this.items.length; i++){
                        if(queueElement.priority <  this.items[i].priority){
                            this.items.splice(i,0,queueElement)

                            added =true;
                            break
                        }

                    }

                    if(!added){
                        this.items.push(queueElement)
                    }
                }
            }

        //2.移除队列的第一个元素,并返回被移除的元素
        PriorityQueue.prototype.deQueue = function(){
           return this.items.shift()
         }

         //3.查看前端的元素
         PriorityQueue.prototype.front = function(){
             return this.items[0]
         }

         //4.判断队列是否为空
         PriorityQueue.prototype.isEmpty = function(){
             return this.items.length ===0
         }

         //5.返回队列里的元素
         PriorityQueue.prototype.size = function(){
            return this.items.length
         }
         
         //6.toString
         PriorityQueue.prototype.toString =function(){
            let resultsString = ''
                 for(var i =0; i<this.items.length;i++){
                    resultsString += this.items[i] +' '
                 }

                 return resultsString
         }
         

        }

        var pq = new PriorityQueue()
        pq.enqueue('abc',120)
        pq.enqueue('abce',100)
        pq.enqueue('abce',10)

        console.log(pq);



    </script>
    
</body>
</html>

运行结果

PS:

原文地址:https://www.cnblogs.com/malong1992/p/14727650.html