優先隊列的實現

我們在排隊的時候,經常會按照優先級爲隊列進行排序

下面給出一種優先級隊列

/*優先隊列*/
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


發佈了88 篇原創文章 · 獲贊 37 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章