JavaScript封装优先级队列

原文地址:JS优先队列

另外:欢迎大家来我的个人网站 TanJia-前端技术分享

实现优先级队列相对队列主要考虑两个地方:

  • 优先级队列中每一个元素由元素的值与元素优先级组成
  • 添加元素时,要考虑到优先级。将新插入元素的优先级与队列中已经存在的元素优先级进行比较,以获得自己正确的位置

实现代码如下:

<script type="text/javascript">
	function PriorityQueue(){
		/* 重新创建一个类 */
		function QueueElement(element,priority){
			this.element = element
			this.priority = priority
		}
		
		/* 封装属性 */
		this.items = []
		
		/* 实现插入方法 */
		PriorityQueue.prototype.enqueue = function(element,priority){
		     /* 1.创建QueueElement对象 */
			let queueElement = new QueueElement(element,priority)
			/* 2.判断队列是否为空 */
			if(this.items.length === 0){
				this.items.push(queueElement)
			}else{
				var added = false
				for(let i=0;i<this.items.length;i++){
					if(queueElement.priority < this.items[i].priority){
						this.items.splice(i,0,queueElement)
						added = true
						break
					}
				}
				if(!added){
					this.items.push(queueElement)
				}
			}
		}
		/* 从队列中删除队首的元素 */
		PriorityQueue.prototype.dequeue = function(){
			return this.items.shift()
		}
		/* 查看队首元素 */
		PriorityQueue.prototype.front = function(){
			return this.items[0]
		}
		/* 查看队列是否为空 */
		PriorityQueue.prototype.isEmpty = function(){
			return this.items.length == 0 
		}
		/* 查看队列的长度 */
		PriorityQueue.prototype.size = function(){
			return this.items.length
		}
		/* toString() */
		PriorityQueue.prototype.toString = function(){
			var resultString = ''
			for(var i=0; i<this.items.length; i++){
				resultString += this.items[i].element + '-'+ this.items[i].priority + ' '
			}
			return resultString
		}
	}
	var pq = new PriorityQueue()
	pq.enqueue('aaa',123)
	pq.enqueue('bbb',54)
	pq.enqueue('ccc',67)
	pq.enqueue('ddd',567)
	pq.enqueue('eee',90)
	console.log(pq.toString()) /*bbb-54 ccc-67 eee-90 aaa-123 ddd-567 */
</script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章