上一篇文章我們講了隊列
隊列:http://www.reibang.com/p/9a35962d5ad5
這一章我們看一看優(yōu)先隊列窃蹋。優(yōu)先隊列即在隊列的基礎(chǔ)上多了一個優(yōu)先級,我們選擇一個對象用來存儲隊列的每一個元素静稻,使用一個屬性來存儲元素的優(yōu)先級警没。存儲整個優(yōu)先隊列我們還是使用數(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 } ]
這樣的一個數(shù)組振湾,其中每一個元素都是一個 priorityQueueElement 對象杀迹。
叩叩叩(手動敲黑板),劃重點:
- 使用數(shù)組存取元素押搪,
- 使用 priorityQueueElement 輔助類來創(chuàng)建一個帶有優(yōu)先級的元素树酪。
- 每次入隊時需要提供元素本身的值(this.element),以及元素本身的優(yōu)先級(this.priority);通過這兩個屬性,我們可以創(chuàng)建一個帶有優(yōu)先級的元素大州。
- 如果保存隊列的數(shù)組是空數(shù)組续语,我們直接 push 進去。
- 如果數(shù)組不為空摧茴,我們先聲明一個變量用來存儲是否入隊的狀態(tài)绵载,開始遍歷數(shù)組,如果遇到一個元素的優(yōu)先級大于需要入隊的元素苛白,那么我們把當(dāng)前元素插入這個元素之前娃豹,使用 splice 方法。
- 如果遍歷玩一遍都沒有發(fā)現(xiàn)有元素大于新元素购裙,那么我們把新元素push到結(jié)尾懂版。
進度有點慢,明天更新躏率,循環(huán)隊列躯畴∶窆模~~