js数据结构与算法-队列的实现和击鼓传花案例
2022/8/20 14:25:13
本文主要是介绍js数据结构与算法-队列的实现和击鼓传花案例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
队列的实现
和栈的实现相似,但是这里使用对象的方式,对象的key是数字的实现,类似数组。
/** * 队列 */ class Queue { #count = 0; //队列最大数量 #lowestCount = 0; //目前第一个元素的下标 #items = {}; //队列 constructor() { } //增加元素 enqueue(element) { this.#items[this.#count] = element; this.#count++; } //移除元素 dequeue() { if (this.isEmpty()) { return undefined; } const result = this.#items[this.#lowestCount]; delete this.#items[this.#lowestCount]; this.#lowestCount++; return result; } //队列是否为空 isEmpty() { // return this.#count - this.#lowestCount === 0; return this.size() === 0; } //查看队列头元素 peek() { if (this.isEmpty()) { return undefined; } return this.#items[this.#lowestCount]; } //队列中有几个元素 size() { return this.#count - this.#lowestCount; } //清空队列 clear() { this.#count = 0; this.#lowestCount = 0; this.#items = {}; } //toString toString() { if (this.isEmpty()) { return ''; } let objString = `${this.#items[this.#lowestCount]}`; for (let i = this.#lowestCount + 1; i < this.#count; i++) { objString = `${objString}, ${this.#items[i]}`; } return objString; } } const q1 = new Queue() q1.enqueue(1) q1.enqueue(2) q1.enqueue(3) q1.dequeue() console.log(q1)
这里新增3个元素,删除一个元素。
返回q1的值:
实际击鼓传花:
游戏规则:一些人围成一圈,开始一个个传花,传花n次(可多可少),单次结束时,淘汰收到花的人,之后从下个人继续,以此类推。到最后剩余一人结束。
使用队列实现过程:
//击鼓传花 function hotPotato(elementsList) { const queue = new Queue(); const elimitatedList = [];//移除了的人 for (let i = 0; i < elementsList.length; i++) { queue.enqueue(elementsList[i]); } while (queue.size() > 1) { //传花中 const num = Math.round(Math.random() * 5 + 5)//传花次数 随机5-10次 for (let i = 0; i < num; i++) { queue.enqueue(queue.dequeue());//移除1人并添加1人 拿到花的是第一个 送出花的是最后一个 形成传递圈 } let ycitem = queue.dequeue();//本次移除的人 elimitatedList.push(ycitem); console.log('传花次数', num, '被淘汰人员', ycitem) } console.log('胜者', queue.dequeue()) } hotPotato(['赵大', '钱二', '张三', '李四', '王五'])
结果打印:
这篇关于js数据结构与算法-队列的实现和击鼓传花案例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26怎么使用 nvm(Node Version Manager)下载并安装指定版本的 Node.js?-icode9专业技术文章分享
- 2024-11-26Vue CLI资料入门教程
- 2024-11-26Vue CLI资料入门教程
- 2024-11-26Vue3+Vite资料:新手入门教程详解
- 2024-11-26Vue3阿里系UI组件资料入门教程
- 2024-11-26Vue3的阿里系UI组件资料入门指南
- 2024-11-26Vue3公共组件资料详解与实战教程
- 2024-11-26Vue3公共组件资料详解与实战教程
- 2024-11-26Vue3核心功能响应式变量资料入门教程
- 2024-11-26Vue3核心功能响应式变量资料详解