- 优先队列中元素的添加和移除是基于优先级的,从优先队列中删除元素时,需要考虑优先权的限制。优先队列具有最高级先出(First In Largest Out)的行为特征。
实现方法:
1、按照优先级入队:
测试一下:// 封装需要入队的元素 function queueElement(value,priority){ this.value = value; this.priority = priority; } // 封装优先队列 function priorityQueue(){ // 声明队列 let queue = []; // 入队 this.enqueue = function(value,priority){ // 声明入队的元素 let ele = new queueElement(value,priority); // console.log(ele); // 当前元素是否已经入队 flag = false; // 入队 // 队列为空直接入队 if(this.listsize() == 0){ queue.push(ele); flag = true; // console.log(queue); } // 队列不为空,判断优先级,插入到正确位置 else{ for(let i=0;i<queue.length;i++){ if(ele.priority > queue[i].priority){ queue.splice(i,0,ele); flag=true; break; } } if(!flag){ queue.push(ele); flag=true; } } } // 出队 this.shift = function(){ return queue.shift(); } // 获取队首元素 this.front = function(){ console.log('队首元素:'+queue[0].value); } // 获取队列长度 this.listsize = function(){ return queue.length; } // 清空队列 this.clearlist = function(){ queue=[]; } // 打印队列元素 this.print = function(){ for(let i=0;i<queue.length;i++) console.log('优先级:'+queue[i].priority+' '+queue[i].value); } }
结果如下:let queue = new priorityQueue(); //入队 queue.enqueue('bx',5); queue.enqueue('jyw',1); queue.enqueue('wmn',4); //打印 queue.print(); console.log('-------------'); //出队 queue.shift(); queue.enqueue('hhh',3); queue.print(); console.log('队列长度:'+queue.listsize()); queue.front();
2、按照优先级出队
测试一下:function Patient(name,code){ this.name = name; this.code = code;//整数表示患者的优先级或病情严重程度 } function Queue(){ this.data = []; /*入队*/ this.enqueue = function(element){ this.data.push(element); }; /*出队:删除队列中更拥有最高优先级的元素,优先码最小的元素优先级最高。*/ this.dequeue = function(){ var priority = this.data[0].code; //使用顺序查找方法寻找优先级最高的元素,优先码越小优先级越高 for(var i=0; i<this.data.length; ++i){ if(this.data[i].code < priority){ priority = i; } } return this.data.splice(priority,1); }; this.toString = function(){ var retstr = ''; for(var i=0; i<this.data.length; ++i){ retstr += this.data[i].name + " code: " + this.data[i].code + "\n"; } return retstr; } }
结果如下:/*test*/ var queue = new Queue(); var p = new Patient('smith',5); queue.enqueue(p); p = new Patient('jones',4); queue.enqueue(p); p = new Patient('fehrenbach',6); queue.enqueue(p); p = new Patient('brown',1); queue.enqueue(p); p = new Patient('ingram',1); queue.enqueue(p); console.log(queue.toString()); var seen = queue.dequeue(); console.log(queue.toString());
版权声明:本文为weixin_45006204原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。