1. 程式人生 > 實用技巧 >線性結構_優先順序佇列

線性結構_優先順序佇列

優先順序佇列

1.特點:

1.普通佇列新插入的元素,預設會被放在佇列的尾部

2.優先順序佇列中的每一個元素都有一個優先順序屬性

2.優先順序佇列會將新插入的元素的優先順序與佇列中的元素進行比較,然後根據優先順序,將新元素放置在正確的位置

3.優先順序佇列的其他屬性和方法與普通佇列無異


2.應用場景

登機時,按照商務艙,經濟艙順序等級

病人排隊時,根據病情輕重排序


3.優先順序佇列的方法

1.enqueue(element,priority)向佇列新增一個元素

2.dequeue()從佇列頭部移除一個元素並返回

3.front()返回佇列中的第一個元素,此時佇列沒有被修改

4.isEmpty()判斷佇列是否為空

5.size()反對佇列長度,即佇列中元素的個數

6.toString()將佇列中的元素轉成字串並返回

   4. 雙向佇列的程式碼實現

   function PriorityQueue(){
       // 在改優先順序佇列中,優先順序數值越小,表示優先順序越高
    
        // 封裝一個內部類
        function QueueElement(item, priority){
            this.item = item;
            this.priority = priority;
        }

        // 優先順序佇列的屬性
this.items = []; // 優先順序佇列的方法 // 1. 向佇列新增一個元素 PriorityQueue.prototype.enqueue = function(item, priority = 0){ // 新建優先順序佇列的元素物件 var elem = new QueueElement(item, priority); if(this.items.length == 0){ this.items.push(elem); }
else{ for(var i = 0; i < this.items.length; i++){ // 依次比較優先順序數值大小 if(elem.priority < this.items[i].priority){ this.items.splice(i, 0, elem); break; } } // 若所有的優先順序數值都比自己小,則自己新增在最後,注意此時的 i 已經比佇列的長度大 1。 if(i == this.items.length){ this.items.push(elem); } } } // 2. 從佇列頭部移除一個元素並返回 PriorityQueue.prototype.dequeue = function(){ return this.items.shift(); } // 3. 返回佇列中的第一個元素,此時佇列沒有被修改 PriorityQueue.prototype.front = function(){ return this.items[0]; } // 4. 判斷佇列是否為空 PriorityQueue.prototype.isEmpty = function(){ return this.items.length == 0; } // 5. 反對佇列長度,即佇列中元素的個數 PriorityQueue.prototype.size = function(){ return this.items.length; } // 6. 將佇列中的元素轉成字串並返回 PriorityQueue.prototype.toString = function(){ var res = ""; for(var i = 0; i < this.items.length; i++){ res += this.items[i].item + "-" + this.items[i].priority + " "; } return res; } }
View Code