优先级队列的封装
优先级队列是队列的一种,不过它不是逐次向队列中添加元素,而是将元素的优先级与队列中元素的优先级进行比较,然后插入一个合适的位置。
优先级队列封装代码与队列封装代码类似,只不过多出一个比较的过程。
首先创建一个名为PriorityQueue的函数
接着封装属性,由于我们是基于数组封装的函数,所以函数内元素的属性为数组形式。
由于我们优先级队列传入的参数内不再只含有一个element元素,还多了一个优先级(priority)元素,所以为了方便操作。
我们在PriorityQueue函数内再创建一个函数,此函数相当于PriorityQueue的内置类。
与队列封装唯一不同的就是插入操作:
在优先级队列的插入操作中,我们要比较元素优先级的大小
首先判断队列内是否为空,若为空,则不用比较优先级大小,直接将元素插入队列
若不为空,我们用for循环遍历队列中的元素,一旦要插入元素的优先级小于队列内元素的优先级,就用splice方法将元素插入到队列内元素的位置上,此时因为元素已经插入,则不用再继续执行for循环,我们用break方法跳出
若我们要插入的元素的优先级比队列中所有元素的优先级都要大,我们则将元素插入到队列的最末尾
所以创建一个布尔型变量,初始值为false,当要插入的元素已经插入时,让此变量等于true
在for循环外面加一个if判断,如果此布尔型变量的值为false,则说明元素未插入,此时将元素用push方法插入到队列的最末尾。
注意,封装函数内应该再加入一个toString方法,否则我们用alert方法测试函数时,弹窗内不是队列内的元素,而是Object
代码如下:
原文:https://www.cnblogs.com/Treee/p/13782637.html