let Queue = (function () {
const items = new WeakMap()
class Queue {
constructor() {
items.set(this, [])
}
enqueue(element) {
let q = items.get(this)
q.push(element)
}
dequeue() {
let q = items.get(this)
let r = q.shift()
return r
}
front() {
let q = items.get(this)
return q[0]
}
isEmpty() {
let q = items.get(this)
return q.length === 0
}
size() {
let q = items.get(this)
return q.length
}
print() {
let q = items.get(this)
console.log(JSON.stringify(q))
}
}
return Queue
})()
// let queue = new Queue()
// console.log(queue.isEmpty())
// queue.enqueue(2343)
// queue.enqueue('rir')
// queue.print()
// 优先队列
function PriorityQueue() {
let items = []
function QueueElement(element, priority) {
this.element = element
this.priority = priority
}
this.enqueue = function (element, priority) {
let queueElement = new QueueElement(element, priority)
let added = false
for (let i = 0; i < items.length; i++) {
if (queueElement.priority < items[i].priority) {
items.splice(i, 0, queueElement)
added = true
break
}
}
if (!added) {
items.push(queueElement)
}
}
this.print = function () {
for (let i = 0; i < items.length; i++) {
console.log(`${items[i].element} - ${items[i].priority}`)
}
}
}
// let priorityQueue = new PriorityQueue()
// priorityQueue.enqueue('John', 2)
// priorityQueue.enqueue('Jack', 1)
// priorityQueue.enqueue('Camila', 1)
// priorityQueue.print()
function hotPotato(nameList, num) {
let queue = new Queue()
for (let i = 0; i < nameList.length; i++) {
queue.enqueue(nameList[i])
}
let eliminated = ''
while (queue.size() > 1) {
for (let i = 0; i < num; i++) {
queue.enqueue(queue.dequeue())
}
eliminated = queue.dequeue()
console.log(eliminated + '在击鼓传花游戏中淘汰')
}
return queue.dequeue()
}
let names = ['John','Jack','Camila','Ingrid','Carl']
let winner = hotPotato(names,7)
console.log('This winner is:' + winner)
console