啥是优先队列?
一般来说,队列讲究先进先出,后进后出就像排队一样。但现实中往往有人有特权,比如机场vip,医院急症室,这些都属于需要优先处理的,即使他是后来的,但人家优先级比较高
js中的任务队列也是优先队列哦,先执行微任务,先执行微任务,微任务执行完之后才会执行宏任务,然后再执行微任务
实现思路
- 写一个队列
- 数据添加一个优先级字段
- 数据将要添加进队列时找到已有队列里优先级比他低的,然后插到那家伙前面(因为优先级跟他一样的先进来的话你还是要乖乖排在他后面)
实现代码
class Person {
constructor(name, priority) {
this.name = name //名称
this.priority = priority //优先级
}
}
// 优先队列
class Queen {
constructor() {
this.arr = []
}
push (person) {
// 如果队列长度为0 直接添加
if (this.arr.length == 0) return this.arr.push(person)
// 循环队列
for (let i = 0; i < this.arr.length; i++) {
// 找到优先级比新加的数据的优先级低的
if (person.priority < this.arr[i].priority) {
// 插入到他的前方
this.arr.splice(i, 0, person)
return
}
}
// 如果没有优先级比他低的,就添加到最后放
this.arr.push(person)
}
shift () {
this.arr.shift()
}
}
const queen = new Queen()
const person11 = new Person('test11', 11)
const person21 = new Person('test21', 21)
const person31 = new Person('test31', 31)
const person12 = new Person('test12', 12)
const person22 = new Person('test22', 22)
queen.push(person11)
queen.push(person21)
queen.push(person31)
queen.push(person12)
queen.push(person22)
console.log(queen.arr);