IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 用JS实现队列-队列的简单理解和基本操作 -> 正文阅读

[数据结构与算法]用JS实现队列-队列的简单理解和基本操作

一、队列的定义

队列:先进先出,只允许在一端进行插入操作,而在另一端进行删除操作的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。假设队列是q = (a1,a2,…,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,列在最后,这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍的最后。如图所示:
在这里插入图片描述
例如:入队:1,2,3,4,5;出队:1,2,3,4,5;

二、队列的基本操作

/**
 * 队列构造函数
 */
 function Queue() {

    /**
     * 用数组来模拟队列
     * @type {Array}
     */
    var items = [];
  
    /**
     * 将元素推入队列
     * @param  {Any} ele 要推入队列的元素
     */
    this.enqueue = function(ele) {
      items.push(ele);
    };
  
    /**
     * 将队列中第一个元素弹出
     * @return {Any} 返回被弹出的元素
     */
    this.dequeue = function() {
      return items.shift()
    };
  
    /**
     * 查看队列的第一个元素
     * @return {Any} 返回队列中第一个元素
     */
    this.front = function() {
      return items[0];
    };
  
    /**
     * 确定队列是否为空
     * @return {Boolean} 若队列为空则返回true,不为空则返回false
     */
    this.isAmpty = function() {
      return items.length === 0
    };
  
    /**
     * 返回队列的长度
     * @return {Number} 队列的长度
     */
    this.size = function() {
      return items.length;
    };
  
    /**
     * 清空队列中所有内容
     */
    this.clear = function() {
      items = [];
    };
  
    /**
     * 以字符串显示队列中所有内容
     */
    this.print = function() {
      console.log(items.toString());
    };
  }
  

三、常用应用

/**
   * 击鼓传花的小游戏
   * @param  {Array} nameList 参与人员列表
   * @param  {Number} num      在循环中要被弹出的位置
   * @return {String}          返回赢家(也就是最后活下来的那个)
   */
  function hotPotato(nameList, num) {
    var queue = new Queue();
  
    for (var i = 0; i < nameList.length; i++) {
      queue.enqueue(nameList[i]);
    }
  
    var eliminated = '';
  
    while (queue.size() > 1) {
      for (var i = 0; i < num; i++) {
        queue.enqueue(queue.dequeue());
      }
  
      eliminated = queue.dequeue();
      console.log(eliminated + " Get out!")
    }
  
    return "胜利者:"+queue.dequeue();
  }
  
  var nameList = ['小明', '小红', '小王', '小强']
  
  console.log(hotPotato(nameList,3))

结果:
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:50:18  更:2021-08-15 15:52:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 17:03:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计