先进先出
代码实现
class Queue<T> {
constructor() {
this.obj = {}
this.count = 0
this.lowestCount = 0
}
obj: {
[key: number]: T
}
count: number
// 记录最小位置
lowestCount: number
value() {
return this.obj
}
// 判断是否为空
isEmpty() {
return !!(!this.size())
}
// 长度
size() {
return this.count - this.lowestCount
}
// 插入数据-尾部插入
enqueue(args: T) {
this.obj[this.count] = args
this.count++
}
// 取出数据 第一个数据
dequeue() {
if (this.isEmpty()) {
return undefined
}
let res = this.obj[this.lowestCount] as T
delete this.obj[this.lowestCount]
this.lowestCount++
return res
}
// 清除
clear(){
this.obj = {}
this.count = 0
this.lowestCount = 0
}
}
应用
/**
* 传花 传完停留在谁那 谁就淘汰 剩下得人继续参赛
* @param list 人员列表
* @param number 传几次
*/
function hotTomato(list: string[], num: number) {
let que = new Queue<string>()
for (let i = 0; i < list.length; i++) {
que.enqueue(list[i])
}
while (que.size()!=1) {
for (let i = 0; i < num; i++) {
que.enqueue(que.dequeue() as string)
}
const miss = que.dequeue()
console.log('Miss:'+miss)
}
console.log('Win:'+que.dequeue())
que.clear()
}
let list = ['a', 'b', 'c', 'd', 'e', 'f']
hotTomato(list, 3)