队列 queue
一种先进先出的数据结构
三个操作:入列,出列,检查队列头(顶部)
// 0 队列头 2队列尾巴
// [0, 1, 2]
class Queue {
constructor() {
this.arr = []
}
// 入列
enqueue(item) {
this.arr.push(item)
}
// 出列
dequeue() {
return this.arr.shift()
}
// 查看队列头
front() {
return this.arr[0]
}
// 大小
size() {
return this.arr.length
}
// 查看
getArr() {
return this.arr
}
}
// 击鼓传花
function DrumSpreading(tagertArr, num) {
const queue = new Queue()
queue.arr = tagertArr
while (tagertArr.length > 1) {
for (let index = 0; index < num-1; index++) {
// 前num-1个先出列 再入列
queue.enqueue(queue.dequeue(tagertArr[index]))
}
// 第num个 出列
queue.dequeue(tagertArr[0])
}
return queue.getArr()
}
// DrumSpreading([1,2,3],3)
// 优先级队列
function PriorityQueue() {
var items = []
// 是否插入
var isInsertion = false
// 辅助类
function QueueItem(element, priority) {
// 元素
this.element = element
// 优先级
this.priority = priority
}
this.enqueue = function(element, priority) {
var queueItem = new QueueItem(element, priority)
for (let index = 0; index < items.length; index++) {
if (queueItem.priority > items[index].priority) {
// console.log(11111,queueItem.priority,items[index].priority)
console.log(items)
items.splice(index,0,queueItem)
isInsertion = true
// break
}
}
if(!isInsertion) {
items.push(queueItem)
}
},
this.getArr = function() {
return items
}
}