優先隊列

一般情況下,隊列都需要遵循FIFO原則,但在一些特殊的場合,我們希望隊列的出隊能夠更加智能,不僅僅考慮入隊先后順序,同時還考慮隊中元素的優先性,以保障資源能夠得到更加科學有效的使用。

要實現優先隊列,首先考慮如何區分不同優先級的元素,一種做法是給元素添加優先級標記/屬性。

var element = {
  ......
  this.priority = high / medium / low;
  ......
}

其次則是元素出隊的實現,已知的方法是在出隊方法/函數中添加判斷邏輯,返回當前隊列中最接近隊首且優先級最高的元素;

function dequeue() {
  var index = 0,//最接近隊首且優先級最高的元素序號,初始為0(即隊首)
      superior = this.data.priority;//當前最高優先級
  //遍歷確定出隊元素
  for (var i = 1; i < this.data.length; ++i) {
    if (this.data[i].priority > priority) {//若當前遍歷元素優先級高于已知最高優先級
      priority = this.data[i].priority;//更新最高優先級
      index = i;//更新出隊元素
    }
  }
return this.data.splice(index,1);
}

2017.04.12的更新
也可以考慮使用堆實現優先級隊列,入隊時調用restore重建堆,形成最大堆,即優先級最高的元素保持在堆頂,出隊時彈出堆頂元素,然后調用restore再次重建堆,需要考慮的是如何保持同級元素的FIFO的特性;

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

推薦閱讀更多精彩內容

  • 本文的目標是要做出優先隊列和堆排序兩個Demo。 完全二叉樹 優先隊列 堆排序 完全二叉樹 完全二叉樹的定義是建立...
    囧書閱讀 5,000評論 13 48
  • 場景 在做一個APP的聊天功能,聊天消息走socket推過來的,每個消息有唯一的id,id隨時間是增大的,聊天消息...
    ck2016閱讀 4,536評論 19 27
  • 1. 介紹 優先隊列就是在我們插入一個元素的同時,賦予它一個優先級。相比于普通的隊列,優先隊列在有更廣泛的用途。 ...
    ghwaphon閱讀 479評論 0 5
  • ----李崇建老師的成人閱讀講座 昨天晚上,抱著非常景仰的心情去聽了李崇建老師的課。自從我一年前聽過李崇建老師的講...
    fiona康樂球媽閱讀 788評論 0 0
  • 對面走來一個姑娘 漂亮牽動了你的心 可你沒有勇氣上前 只放任欲眼貪婪 直到淹沒人海,淡出視線 不要讓錯過成為遺憾 ...
    煙酒女人閱讀 331評論 0 0