學(xué)習(xí)Javascript數(shù)據(jù)結(jié)構(gòu)與算法 — 優(yōu)先隊列

上一篇文章我們講了隊列

隊列:http://www.lxweimin.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 對象。

叩叩叩(手動敲黑板),劃重點:

  1. 使用數(shù)組存取元素,
  2. 使用 priorityQueueElement 輔助類來創(chuàng)建一個帶有優(yōu)先級的元素。
  3. 每次入隊時需要提供元素本身的值(this.element),以及元素本身的優(yōu)先級(this.priority);通過這兩個屬性,我們可以創(chuàng)建一個帶有優(yōu)先級的元素。
  4. 如果保存隊列的數(shù)組是空數(shù)組,我們直接 push 進(jìn)去。
  5. 如果數(shù)組不為空,我們先聲明一個變量用來存儲是否入隊的狀態(tài),開始遍歷數(shù)組,如果遇到一個元素的優(yōu)先級大于需要入隊的元素,那么我們把當(dāng)前元素插入這個元素之前,使用 splice 方法。
  6. 如果遍歷玩一遍都沒有發(fā)現(xiàn)有元素大于新元素,那么我們把新元素push到結(jié)尾。

進(jìn)度有點慢,明天更新,循環(huán)隊列。~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容