上一篇文章我們講了隊(duì)列
隊(duì)列:http://www.lxweimin.com/p/9a35962d5ad5
這一章我們看一看優(yōu)先隊(duì)列。優(yōu)先隊(duì)列即在隊(duì)列的基礎(chǔ)上多了一個(gè)優(yōu)先級(jí),我們選擇一個(gè)對(duì)象用來存儲(chǔ)隊(duì)列的每一個(gè)元素,使用一個(gè)屬性來存儲(chǔ)元素的優(yōu)先級(jí)。存儲(chǔ)整個(gè)優(yōu)先隊(duì)列我們還是使用數(shù)組。
實(shí)現(xiàn):
<code>
function priorityQueue(){
var items = [];
function priorityQueueElement(element,priority){
this.element = element;
this.priority = priority;
}
this.enqueue = function(element,priority){
var Node = new priorityQueueElement(element,priority);
if(items.length == 0){
items.push(Node)
}else{
var added = false;
for(var i=0;i<items.length;i++){
if(Node.priority < items[i].priority){
items.splice(i,0,Node);
added = true;
break;
}
}
if(!added){
items.push(Node);
}
}
}
this.print =function(){
console.log(items);
}
}
var pQ = new priorityQueue();
pQ.enqueue("a",1);
pQ.enqueue("b",2);
pQ.enqueue("c",3);
pQ.enqueue("d",1);
pQ.print();
</code>
在上述代碼中打印結(jié)果應(yīng)該是:
[ priorityQueueElement { element: 'a', priority: 1 },
priorityQueueElement { element: 'd', priority: 1 },
priorityQueueElement { element: 'b', priority: 2 },
priorityQueueElement { element: 'c', priority: 3 } ]
這樣的一個(gè)數(shù)組,其中每一個(gè)元素都是一個(gè) priorityQueueElement 對(duì)象。
叩叩叩(手動(dòng)敲黑板),劃重點(diǎn):
- 使用數(shù)組存取元素,
- 使用 priorityQueueElement 輔助類來創(chuàng)建一個(gè)帶有優(yōu)先級(jí)的元素。
- 每次入隊(duì)時(shí)需要提供元素本身的值(this.element),以及元素本身的優(yōu)先級(jí)(this.priority);通過這兩個(gè)屬性,我們可以創(chuàng)建一個(gè)帶有優(yōu)先級(jí)的元素。
- 如果保存隊(duì)列的數(shù)組是空數(shù)組,我們直接 push 進(jìn)去。
- 如果數(shù)組不為空,我們先聲明一個(gè)變量用來存儲(chǔ)是否入隊(duì)的狀態(tài),開始遍歷數(shù)組,如果遇到一個(gè)元素的優(yōu)先級(jí)大于需要入隊(duì)的元素,那么我們把當(dāng)前元素插入這個(gè)元素之前,使用 splice 方法。
- 如果遍歷玩一遍都沒有發(fā)現(xiàn)有元素大于新元素,那么我們把新元素push到結(jié)尾。
進(jìn)度有點(diǎn)慢,明天更新,循環(huán)隊(duì)列。~~