优先级队列 实现方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>优先级队列</title>
</head>
<body>
    
    <script>
        // 封装优先级队列类
        function PriortyQueue(){

            //  内部类
            function QueueElement(element, priority){
                this.element = element 
                this.priority = priority
            }

            // 封装属性
            this.items = []
 
            // 1 实现插入方法
            PriortyQueue.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 从队列中删除前端元素
             PriortyQueue.prototype.dequeue = function(){
                return this.items.shift()
            }

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

            // 4 查看队列是否为空
            PriortyQueue.prototype.isEmpty = function(){
                return this.items.length == 0
            }

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

              // 6 toString方法
            PriortyQueue.prototype.toString = function(){
                var resultString = ''
                for(var i = 0; i < this.items.length; i++){
                    resultString += this.items[i].element + '-' + this.items[i].priority + ''
                } 
                return resultString
            }
        }
  
        // 测试 代码
        var pq = new PriortyQueue()

        pq.enqueue('abc',111)
        pq.enqueue('abc',200)
        pq.enqueue('abc',50)
        pq.enqueue('abc',60)

        console.log(pq)
         
    </script>
</body>
</html>
posted @ 2021-01-12 11:36  13522679763-任国强  阅读(120)  评论(0)    收藏  举报