我們在排隊的時候,經常會按照優先級爲隊列進行排序
下面給出一種優先級隊列
/*優先隊列*/
function PriorityQueue() {
var items = [];
/*
這裏我們使用數字來定義優先級,
數字小的優先級高。0 的優先級大於1的優先級
同等優先級。先進入隊列的排在前面
*/
var QueueElement = function (value, priority) {
this.value = value;
this.priority = priority;
}
/*入隊*/
this.enqueue = function (value, priority) {
var queue_element = new QueueElement(value, priority);
// 1.隊列爲空
if(this.isEmpty()) {
items.push(queue_element);
return;
}
// 2.從隊尾開始遍歷。保證同等優先級情況下,
// 先進入隊列的有更高的優先級
for(var i=this.size()-1; i>=0; --i) {
if(queue_element.priority >= items[i].priority) {
items.splice(i+1, 0, queue_element);
return;
}
}
// 3. 插入的元素具有最高的優先級,則插入的到隊首
// 也可以使用 items.splice(0, 0, queue_element);
items.unshift(queue_element);
}
/*出隊,出列*/
this.dequeue = function () {
return items.shift();
}
/*返回隊列的第一個元素*/
this.front = function () {
return items[0];
}
/*判斷隊列是否爲空*/
this.isEmpty = function () {
return items.length == 0;
}
/*清空隊列*/
this.clear = function () {
items = [];
}
/*判斷隊列長度*/
this.size = function () {
return items.length;
}
/*打印隊列*/
this.print = function () {
console.log(items);
}
}
var queue = new PriorityQueue();
queue.enqueue("Tom", 2);
queue.enqueue("Jack", 1);
queue.enqueue("Bonnie", 1); // 排出的順序爲
queue.enqueue("Lucas", 3); // Jack、Bonnie、Tom、Lucas