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