队列是一种先入先出,后入后出的数据结构
export class Queue {
private count: number; // 总数
private current: number; // 当前下标
private obj: object;
constructor() {
this.count = 0;
this.current = 0;
this.obj = {};
}
// 向队列追加
push(param) {
this.obj[this.count] = param;
this.count++;
}
// 推出队列数据
shift() {
if (this.isEmpty()) {
return "当前队列没有数据";
}
// 移出队列
const res = this.obj[this.current];
delete this.obj[this.current];
// 被移出后,第一项向上+1
this.current++;
return res;
}
// 返回当前队列的第一项
peek() {
return this.obj[this.current];
}
// 当前队列是否为空
isEmpty() {
return this.count - this.current === 0;
}
// 放回当前队列的size
size() {
return this.count - this.current;
}
}
应用场景:击鼓传花
function sprayOfBlossom(eleList, count) {
const queue = new Queue();
const resultList = [];
for (let i = 0; i < eleList.length; i++) {
queue.push(eleList[i]);
}
while (queue.size() > 1) {
// 保留最后一个
for (let i = 0; i < count; i++) {
queue.push(queue.shift()); // 将传入的人员进行循环
}
resultList.push(queue.shift());
}
return {
resultList,
winner: queue.shift(),
};
}