返回
用心掌握JS中的队列类,一招制胜击鼓传花!
前端
2023-09-08 17:33:20
队列类:幕后功臣
队列是一种先进先出的(FIFO)数据结构,就像是在现实世界中排队一样。队列类负责管理队列中的元素,并提供一系列操作方法,如添加、删除和读取元素。
1. 构筑队列蓝图
class Queue {
// 构造函数,初始化队列
constructor() {
this.items = [];
}
// 入队操作,在队列尾部添加元素
enqueue(element) {
this.items.push(element);
}
// 出队操作,从队列头部移除并返回元素
dequeue() {
if (this.isEmpty()) {
return undefined;
}
return this.items.shift();
}
// 查看队列首部的元素,但不删除它
peek() {
if (this.isEmpty()) {
return undefined;
}
return this.items[0];
}
// 判断队列是否为空
isEmpty() {
return this.items.length === 0;
}
// 获取队列的长度
size() {
return this.items.length;
}
// 清空队列
clear() {
this.items = [];
}
}
2. 击鼓传花:队列大显身手
有了队列类,我们就可以用它来实现击鼓传花游戏了。游戏规则很简单:一群人围成一圈,手里拿着一个花。当音乐响起时,花开始在人群中传递。当音乐停止时,拿着花的人被淘汰。游戏继续,直到只剩下最后一个人。
// 创建队列,代表游戏中的参与者
const queue = new Queue();
// 将参与者添加到队列中
const players = ["Alice", "Bob", "Carol", "Dave", "Eve"];
players.forEach((player) => queue.enqueue(player));
// 模拟击鼓传花游戏
while (queue.size() > 1) {
// 音乐响起,花开始传递
for (let i = 0; i < 5; i++) {
// 从队列头部取出一个参与者,并将其添加到队列尾部
const player = queue.dequeue();
queue.enqueue(player);
}
// 音乐停止,淘汰当前队列首部的参与者
const eliminatedPlayer = queue.dequeue();
console.log(`${eliminatedPlayer} 被淘汰了!`);
}
// 游戏结束,宣布最后的获胜者
const winner = queue.dequeue();
console.log(`恭喜 ${winner} 获胜!`);
结语
通过构建队列类和击鼓传花游戏的实现,我们不仅学习了队列这种数据结构,也体验了将抽象数据结构应用于实际问题的乐趣。希望你能从这篇文章中有所收获,并在未来的编程实践中灵活运用队列类,解决更多复杂的问题。