js队列结构以及应用案例

<!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)

            // console.log(this.items);

         }

         //2.移除队列的第一个元素,并返回被移除的元素
         Queue.prototype.deQueue = function(){
           return this.items.shift()
         }

         //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(){
            let resultsString = ''
                 for(var i =0; i<this.items.length;i++){
                    resultsString += this.items[i] +' '
                 }

                 return resultsString
         }
         
      }

   //    //使用队列
   //    var queue = new Queue();

   //    //将元素加入到队列中
   //    queue.enQueue('abc ')
   //    queue.enQueue('eqwc ')
   //    queue.enQueue('fgqwc ')
   //  //   console.log(queue);

   //    queue.deQueue()//删除前面的元素
   //    console.log(queue); //["eqwc ", "fgqwc "]
   //   console.log(queue.front());  //eqwc
   //   console.log(queue.isEmpty());
   //   console.log(queue.toString());


      //面试题 击鼓传花
     function passGame(nameList,num){
  
         //1.创建队列 
         var queue = new Queue();

         //2.将所有人依次放入队列中
         for(let i=0;i< nameList.length;i++){
            queue.enQueue(nameList[i])
         }


         while(queue.size() >1){
             //3.开始数数
            //不是num的话,重新加入到队列中,是的话,从队列移除
            //3.1 num数字之前的人重新加入到队列的末尾
            for(let i=0;i<num -1;i++){
               queue.enQueue(queue.deQueue())
            }


            //3.2 num对应的这个人,直接从队列中移除
            queue.deQueue()

         }

         //4.获取剩下的那个人
        var finalName =  queue.front()
        console.log('最终剩下的那个人:' +finalName);

        return nameList.indexOf(finalName)

     }

     //参数 击鼓传花
     let names = ['zhangsan','lisi','wangwu','zhaoliu',"傻七"];
     
     console.log(passGame(names,2));
     


    </script>
</body>
</html>

效果:

 

 

PS

posted @ 2021-05-03 03:49  前端那点事  阅读(125)  评论(0编辑  收藏  举报