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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值