优先级队列_优先级队列封装

我们已经了解过了队列,接下来了解一下什么是优先级队列:

其实程序就是对生活的一种描述,之前我们了解过队列,一个队列就好比生活中我们去火车站进站,每个人都需要排队,依次进站乘车。

但是我们考虑到这个一个现象:
在这里插入图片描述
在火车站进站时,都会规定军人优先,这里就涉及到了优先级的概念。在程序中亦是如此,队列也有优先级队列之说。
在这里插入图片描述
接下来实现一下优先级队列的封装:

function PriorityQueue() {
	// 内部类
	function QueueElement(element, priority) {
		this.element = element;
		this.priority = priority;
	}
	// 封装属性
	this.item = [];
	
	// 1. enqueue
	PriorityQueue.prototype.enqueue = function(element, priority) {
		// 拿到需要插入的元素对象
		let queueElement = new QueueElement(element, priority);
		// 如果队列中本来没有元素,则直接插入
		if (this.item.length == 0) {
			this.item.push(queueElement);
		} else {
			// 定义一个变量用于存储是否插入成功
			var added = false;
			// 这里规定优先级值小的在前面
			// 如果队列中本来有元素,则依次比较优先级,当遇到优先级值大于它的优先级值的元素,则插入到该元素之前
			for (let i = 0; i < this.item.length; i ++) {
				if (queueElement.priority < this.item[i].priority) {
					this.item.splice(i, 0, queueElement);
					added = true;
					break;
				}
			}
			// 最后剩下没有比它优先级值大的元素
			if (!added) {
				this.item.push(queueElement);
			}
		}
	}
	// 2. dequeue
	PriorityQueue.prototype.dequeue = function() {
		return this.item.shift();
	}
	// 3. front
	PriorityQueue.prototype.front = function() {
	    return this.item[0];
	}
	// 4. isEmpty
	PriorityQueue.prototype.isEmpty = function() {
	    return this.item.length == 0;
	}
	// 5. size
	PriorityQueue.prototype.size = function() {
	    return this.item.length;
	}
	// 6. toString
	PriorityQueue.prototype.toString = function() {
	    let resultString = '';
	    for (let i = 0; i < this.item.length; i ++) {
	        resultString += this.item[i].element + ' ';
	    }
	    resultString = resultString.trim();
	    return resultString;
	}
}

当我们测试的时候可以输入一下代码:

let pq = new PriorityQueue();
pq.enqueue('a', 100);
pq.enqueue('b', 200);
pq.enqueue('d', 400);
pq.enqueue('c', 300);
pq.enqueue('e', 500);
alert(pq);

在这里插入图片描述
可以看到弹出框中已经帮我们按照优先级排好顺序了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值