总结前端常用数据结构 之 队列篇【JavaScript 】

devtools/2025/3/4 13:21:48/

推动你的事业,不要让你的事业推动你。——爱因斯坦

目录

  • 队列是什么?
  • JS异步、事件循环、任务队列:
  • 队列的实现方法:
    • ‌数组实现‌ - 封装队列:
    • 对象实现(优化性能)- 封装队列:
  • 队列应用之击鼓传花:

队列是什么?

队列是一种线性表,它只允许在表的一端进行插入操作,而在另一端进行删除操作。 其中,允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。即先进先出!【FIFO - first in first out】。队列中没有元素时,称为空队列。

JS异步、事件循环、任务队列:

点击跳转 - JS同步任务、异步任务(宏任务和微任务)
在这里插入图片描述
提示:上图是b站 千锋教育 课程里的图,侵权请联系删除。

队列的实现方法:

‌数组实现‌ - 封装队列:

使用 push() 和 shift() 方法实现入队和出队操作。

javascript">class Queue {#item = [];dequeue () {this.#item.shift();}enqueue (val) {this.#item.push(val);}front () {return this.#item.at(0);}isEmpty () {return this.#item.length === 0;}size () {return this.#item.length;}clear () {this.#item = [];}toString () {return this.#item.join("");}}let queue = new Queue();

对象实现(优化性能)- 封装队列:

数组的 shift() 方法时间复杂度为 O(n),通过对象存储和头尾指针优化出队性能至 O(1)‌。

javascript">class Queue {#items = {};#count = 0;#lowcount = 0;dequeue () {if (this.isEmpty()) {return;}let res = this.#items[this.#lowcount];delete this.#items[this.#lowcount];this.#lowcount++;return res;}enqueue (val) {this.#items[this.#count] = val;this.#count++;}front () {return this.#items.at(0);}isEmpty () {return this.size() === 0;}size () {return this.#count - this.#lowcount;}clear () {this.#items = {};this.#lowcount = 0;this.#count = 0;}toString () {let str = '';for (let i = this.#lowcount; i < this.#count; i++) {str += `${this.#items[i]} `}return str;}}let queue = new Queue();

队列应用之击鼓传花:

击鼓传花游戏通常是指一群人围成一圈传递物品,当鼓声停止时,持有物品的人被淘汰,直到剩下最后一人。
解题思路:

  • 队列循环逻辑‌:当队列长度大于1时,持续将队首元素移动到队尾,每轮循环次数由参数num决定‌。‌
  • 淘汰规则‌:每轮循环结束后(即完成num次移动),移除当前队首元素‌。
  • 终止条件‌:当队列仅剩一个元素时,返回该元素及其在原数组中的索引‌。

使用js代码解决:

javascript">class Queue {#items = {};#count = 0;#lowcount = 0;dequeue () {if (this.isEmpty()) {return;}let res = this.#items[this.#lowcount];delete this.#items[this.#lowcount];this.#lowcount++;return res;}enqueue (val) {this.#items[this.#count] = val;this.#count++;}front () {return this.#items.at(0);}isEmpty () {return this.size() === 0;}size () {return this.#count - this.#lowcount;}clear () {this.#items = {};this.#lowcount = 0;this.#count = 0;}toString () {let str = '';for (let i = this.#lowcount; i < this.#count; i++) {str += `${this.#items[i]} `}return str;}}function game (list, num) {let queue = new Queue();for (let i = 0; i < list.length; i++) {queue.enqueue(list[i]);}while (queue.size() > 1) {for (let i = 0; i < num; i++) {queue.enqueue(queue.dequeue())}console.log(queue.dequeue(), '淘汰了');// queue.dequeue();}console.log('获胜的是:', queue.dequeue());// return queue.dequeue();}game(['kitty', 'Alice', 'AK', 'Box', 'Whe'], 7);

http://www.ppmy.cn/devtools/164057.html

相关文章

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…

Windows环境下安装Redis并设置Redis开机自启

文章目录 0. 前言1. 下载 Windows 版本的Redis2. 为 Redis 设置连接密码&#xff08;可选&#xff09;3. 启动 Redis4. 设置 Redis 开机自启 4.1 将 Redis 进程注册为服务4.2 设置 Redis 服务开机自启4.3 重启电脑测试是否配置成功4.4 关闭 Redis 开机自启&#xff08;拓展&am…

基于单片机的无线温度采集报警系统设计

摘要 随工农业现代化技术的不断发展&#xff0c;温度作为其中重要的角色&#xff0c;越来越引起人们的注意&#xff0c;而温度如果有一定的偏差&#xff0c;就会影响工农业在生产时产品的质量&#xff0c;且人们也不能一直盯着温度测量仪器。而本次论文所做的系统就是有关温度…

Elasticsearch 的分布式架构原理:通俗易懂版

Elasticsearch 的分布式架构原理&#xff1a;通俗易懂版 Lucene 和 Elasticsearch 的前世今生 Lucene 是一个功能强大的搜索库&#xff0c;提供了高效的全文检索能力。然而&#xff0c;直接基于 Lucene 开发非常复杂&#xff0c;即使是简单的功能也需要编写大量的 Java 代码&…

机器翻译与语音识别技术:推动人机交互的新篇章

在数字化时代&#xff0c;语言不仅是人类交流的基本工具&#xff0c;也是连接不同文化和国家的桥梁。随着科技的飞速发展&#xff0c;机器翻译与语音识别技术作为语言处理领域的两大核心技术&#xff0c;正逐步改变着人类与计算机之间的交互方式。本文将深入探讨这两种技术的原…

C语言机试编程题

编写版本&#xff1a;vc2022 目录 1.求最大/小值 2.求一个三位数abc&#xff0c;使a的阶乘b的阶乘c的阶乘abc 3.求2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13&#xff0c;的前20项和 4.求阶乘 5.求10-1000之间所有数字之和为5的…

基于Selenium的Python淘宝评论爬取教程

文章目录 前言1. 环境准备安装 Python&#xff1a;安装 Selenium&#xff1a;下载浏览器驱动&#xff1a; 2. 实现思路3. 代码实现4. 代码解释5. 注意事项 前言 以下是一个基于 Selenium 的 Python 淘宝评论爬取教程&#xff0c;需要注意的是&#xff0c;爬取网站数据应当遵守…

DeepSeek能画流程图吗?分享一种我正在使用的DeepSeek画流程图教程

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌‌‌​​‍‌​‌​‌‌​​‍‌​​​‌‌‌‌‍‌​‌‌​‌‌‌‍‌‌​​‌​‌​‍‌​​‌‌​‌‌‍‌​​​‌​‌​‍‌​‌‌‌​‌‌‍‌‌​​‌‌‌‌‍‌​‌‌‌​​​‍‌…