js 队列

文章目录

  • 队列
    • 队列结构
    • 队列的创建 -- 数组方法
      • 代码实现
    • 队列的实际运用 -- 击鼓传花
      • 代码

队列

js 队列_第1张图片

队列结构

js 队列_第2张图片

队列的创建 – 数组方法

js 队列_第3张图片

代码实现

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 = [];
      // 方法
      // 1.将元素加入到队列
      Queue.prototype.enqueue = function(element){
        this.items.push(element);
      };
      // 2.从队列中删除前端元素
      Queue.prototype.delqueue = function(element){
        // 记住这里得有返回值不然后面击鼓传花是undefined,因为函数默认返回值是undefined
        return this.items.shift(element);
      };
      // 3.查看前端元素
      Queue.prototype.front = function(){
        return this.items[0];
      }

      // 4.查看队列是否为空
      Queue.prototype.isEmpty = function(){
        return this.items.length == 0;
      }

      // 5.查看队列中元素个数
      Queue.prototype.size = function(){
        return this.items.length;
      }

      // 6.toString方法
      Queue.prototype.toString = function(){
        return this.items.join("");
      }
    }

    let queue = new Queue();
    console.log(queue.isEmpty());
    console.log(queue.size());
    queue.enqueue(1);
    queue.enqueue(10);
    queue.enqueue(8);
    queue.enqueue(7);
    console.log(queue);
    console.log(queue.front());
    console.log(queue.isEmpty());
    console.log(queue.size());
    console.log(queue.toString());
    queue.delqueue();
    console.log(queue);
    console.log(queue.front());
    console.log(queue.isEmpty());
    console.log(queue.size());
    console.log(queue.toString());
  script>
body>
html>

队列的实际运用 – 击鼓传花

题目:
js 队列_第4张图片
这里其实并不好思考到和队列搭上边,建议看代码前,读者先仔细想想,自己做的时候会怎么做!

想和队列搭上边,就得思考到,围成一个圈,然后每次数到特定的就移除,然后接着数!

代码

// 面试题:击鼓传花
function passGame(nameList,num){
  // 1 创建一个队列
  let queue1 = new Queue();
  // 2 将值都传给队列
  for(i of nameList){
    console.log(i);
    queue1.enqueue(i);
  }
  // 得一直循环到只剩一个人
  while(queue1.size() > 1){
    // 数字之前的人重新加入到队列
    //这里数组做多了的读者可能会和我一样,一开始感觉会不会越界,其实这个根本没用到下标访问,只是一直循环,操作交给了queue
    for(let i = 0;i<num-1;i++){
      queue1.enqueue(queue1.delqueue())
    }
    // num对应的人,直接删除
    queue1.delqueue();
  }
  console.log(queue1.front());
  return nameList.indexOf(queue1.front());
}
let arr = ["1","2","3","4","5"];
console.log(passGame(arr,3));

你可能感兴趣的:(#,数据结构,算法,javascript,js队列)