<!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: