JavaScript:队列的封装及面试题击鼓传花队列方法实现案例

news2024/12/23 11:17:32

队列的定义:队列简称队。是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。其操作特性为先进先出(First In First Out,FIFO),并且只允许在队尾进,队头出。

JavaScript对队列的封装

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>封装队列</title>
</head>
<body>
  <script>
    // 封装队列类
    function Queue() {
      // 属性
      this.items = []
      // 方法
      // 将元素加入队列中
      Queue.prototype.enqueue = function(element) {
        this.items.push(element)
      }
      // 从队列中删除元素
      Queue.prototype.dequeue = function() {
        return this.items.shift()
      }
      // 查看前端的元素
      Queue.prototype.front = function() {
        return this.items[0]
      }
      // 查看队列是否为空
      Queue.prototype.isEmpty = function() {
        return this.items.length == 0
      }
      // 查看队列中元素的个数
      Queue.prototype.size = function() {
        return this.items.length
      }
      // toString方法
      Queue.prototype.toString = function() {
        var resultString = ''
        for(var i = 0 ; i < this.items.length ; i++) {
          resultString += this.items[i]+' '
        }
        return resultString
      }
    }
    // 使用队列
    var queue = new Queue()
    // 将元素加入到队列中
    queue.enqueue("abc")
    queue.enqueue("def")
    queue.enqueue("lxh")
    alert(queue)
    // 从队列中删除元素
    queue.dequeue()
    alert(queue)
    // front方法
    alert(queue.front())
    // 其他方法
    alert(queue.isEmpty())
    alert(queue.size())
  </script>
</body>
</html>

队列的应用案例-->前端面试题击鼓传花
在这里插入图片描述
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>击鼓传花案例</title>
</head>
<body>
  <script>
    function Queue() {

      this.items = []
      Queue.prototype.enqueue = function(element) {
        this.items.push(element)
      }

      Queue.prototype.dequeue = function() {
        return this.items.shift()
      }

      Queue.prototype.front = function() {
        return this.items[0]
      }

      Queue.prototype.isEmpty = function() {
        return this.items.length == 0
      }

      Queue.prototype.size = function() {
        return this.items.length
      }

      Queue.prototype.toString = function() {
        var resultString = ''
        for(var i = 0 ; i < this.items.length ; i++) {
          resultString += this.items[i]+' '
        }
        return resultString
      }
    }
    // 封装函数
    function passGame(namelist,num) {
      // 创建队列结构
      var queue = new Queue()
      // 将所有的人加入到队列中
      for(var i = 0 ; i < namelist.length ; i++) {
        queue.enqueue(namelist[i])
      }
      // 开始数数
      // 不是num数字的时候,重新加入到队列的末尾
      // 是num数字的时候,将其从队列中删除
      while(queue.size() > 1) {
        for(var i = 0 ; i < num-1 ; i++) {
          // num之前的人重新放入到队列的末尾
          queue.enqueue(queue.dequeue())
        }
        // num对应的这个人直接从队列中删除掉
        queue.dequeue()
      }
      // 获取队列中剩下的那个人
      alert(queue.size())
      var endName = queue.front()
      alert("最终剩下的人:"+endName)
      return namelist.indexOf(endName)
    }

    // 测试击鼓传花的方法
    names = ['lily','lucy','lingxiaohu','hyw','xiaonaihu']
    alert(passGame(names,3))
  </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【金猿人物展】天云数据雷涛:从数据湖到湖仓一体再到数据编织,完成的是燃油车到油电混再到纯电技术的改造...

‍雷涛本文由天云数据CEO雷涛撰写并投递参与“数据猿年度金猿策划活动——2022大数据产业趋势人物榜单及奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业这一两年&#xff0c;北美以Facebook、谷歌为驱动的存算分离的虚拟数仓架构&#xff0c;正在非常快速的洗牌…

【408篇】C语言笔记-第十七章(考研必会的排序算法(下))

文章目录第一节&#xff1a;选择排序1. 选择排序原理解析2. 选择排序代码实战3. 时间复杂度与空间复杂度第二节&#xff1a;堆排序1. 堆排序原理解析2. 堆排序代码实战3. 时间复杂度与空间复杂度第三节&#xff1a;归并排序1. 归并排序原理解析2. 归并排序代码实战3. 时间复杂度…

5、前端笔记-JS-运算符

运算符也被称为操作符&#xff0c;用于实现赋值、比较和执行算数运算等功能的符号 常用的运算符&#xff1a; 算数运算符、递增和递减运算符、比较运算符、逻辑运算符、赋值运算符 1、算术运算符 -*/% - * / %&#xff08;1&#xff09;%取余可以用来判断一个数是否可以被整除…

家政清洁服务系统设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 修改意见&#xff1a;题目改为“家政清洁服务系统设计与实现” 提供服务&#xff1a;钟点打扫卫生&#xff08;按小时收…

node.js+uni计算机毕设项目基于微信平台的大学生时间规划管理小程序设计(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

二次封装a-upload组件,自定义上传预览

a-upload封装效果自定义上传customRequesttransformFile上传前修改文件流自定义预览调整props和a-uoload一致install封装vue组件结束效果 编辑 预览 不展示删除和上传 空数据 自定义图片样式 自定义上传customRequest 入参是本地上传的文件流 async customRequest(file) …

Java笔记之线程池详解

文章目录一、线程池是什么&#xff1f;二、为什么要使用线程池&#xff1f;三、jdk自带的四种线程池1. 线程池参数2.工作队列3.拒绝策略4.四种线程池一些示例四、自定义线程池一、线程池是什么&#xff1f; 一种线程使用模式&#xff0c;是一种多线程处理形式&#xff0c;处理…

FineReport表格软件-CSS动态切换年月日查询报表

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.1 预期效果 由于业务的需要&#xff0c;很多情况下需要当满足某个条件时&#xff0c;某些查询条件才显示出来&#xff0c;如下图所示&#xff1a; 1.2 实现思路 由于业务的需要&#xff0c;很多情况下需要当满足某个…

[Flask]环境配置和项目框架的构建

一、配置flask 在Python环境下使用控制台的pip install命令进行安装 pip install Flask2.1.0 &#xff01;&#xff01;&#xff01;安装版本必须是2.x以上&#xff0c;否则可能出现错误&#xff1a;cannot import name escape from jinja2 &#xff08;flask 2.x放弃了对jinj…

CloudCompare 的简单的使用说明

File open&#xff1a;打开 save&#xff1a;保存 Global Shift settings&#xff1a;设置最大绝对坐标&#xff0c;最大实体对角线 Primitive Factory&#xff1a;对点云进行原始加工&#xff0c;改变原始点云的形状 3D mouse&#xff1a;对3D鼠标&#xff08;如3Dconnexion&a…

二叉树的绘制

目录 一、知乎方法 二、动手实践 DOT 语言 无向图 有向图 绘制二叉树 设置属性 如何绘制优美的二叉树 一、知乎方法 知乎上的大佬提供了一系列画图的方法&#xff0c;感兴趣的朋友可以自行去看看 用 Graphviz 绘制一棵漂亮的二叉树 - 南浦月 二叉搜索树&#xff0c…

庖丁解牛式讲解并发编程,GitHub高星最新开源阿里Java进阶必备手册

最近看到粉丝群里讨论最多的问题是现在Java这么卷&#xff0c;担心年龄大了以后会被裁员或者清退&#xff0c;要怎么做才能保住自己的“饭碗”。楼主认为不论是阅读优秀源码、领略设计思路&#xff0c;还是学习优秀架构、代码设计等等&#xff0c;都是加薪升职的正确路径&#…

安全分析开发环境 技术背景

安全分析开发环境一键部署 Gartner 报告中指出 [7]&#xff0c;Platfor m Ops for AI 是一种编排和扩展运营人工智能的方法&#xff0c;利用跨数据、机器学习、人工智能和应用程序 开发管道的多种最佳实践&#xff0c;为基于人工智能的系统创建一个高效的交付模型。Platform O…

RV1126笔记十七:吸烟行为检测及部署<四>

若该文为原创文章&#xff0c;转载请注明原文出处。 转换成onnx模型(windows) 一、查看pt文件 准备好训练好的pt文件,可以用Netron打开看看大概长啥样: 二、模型转换 主要的目的是想把训练好的pt文件转成onnx模型&#xff0c;为后面RV1126的部署做铺垫。 我们是在py38的con…

ChatGPT怎么突然变得这么强?华人博士万字长文深度拆解GPT-3.5能力起源

文章目录一、2020 版初代 GPT-3 与大规模预训练二、从 2020 版 GPT-3 到 2022 版 ChatGPT三、Code-Davinci-002和 Text-Davinci-002&#xff0c;在代码上训练&#xff0c;在指令上微调四、text-davinci-003 和 ChatGPT&#xff0c;基于人类反馈的强化学习的威力五、总结当前阶段…

SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策

SAP MM SPED输出报错-No authorization for delivery from shipping point US##-之对策 前日收到某客户业务人员上报的一个问题&#xff0c;说是发现某个公司间STO单据的外向交货单里SPED 这个output不成功&#xff0c;不能成功触发inbound delivery单据。 相关报错信息如下&am…

项目实战之旅游网(四)后台角色管理(上)

目录 一.角色列表 二.新增角色 三.修改角色 四.删除角色 一.角色列表 接下来我们编写角色管理功能&#xff0c;首先查询角色列表: 1.编写RoleService Service public class RoleService {Autowiredprivate RoleMapper roleMapper;public Page<Role> findPage(int …

【无线通信】鲸鱼优化算法及其在无线网络资源分配中的应用(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

腾讯云Linux 轻量应用服务器如何搭建 FTP 服务?

Vsftpd&#xff08;very secure FTP daemon&#xff09;是众多 Linux 发行版中默认的 FTP 服务器。本文以 CentOS 7.6 64位操作系统的轻量应用服务器为例&#xff0c;使用 vsftpd 软件搭建 Linux 轻量应用服务器的 FTP 服务。 本文搭建 FTP 服务组成版本如下&#xff1a; Lin…

node.js+uni计算机毕设项目基于微信点餐系统小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…