队列的应用

队列的应用目录 1 把队列用底层算法实现 2 方块舞 3 使用队列对数据快速排序 4 创建 Person 类完成要求 1 把队列里面的方法用原始的方法实现 function Queue this dataStore 进队列 从尾部添加数据 this enqueue function element

大家好,我是讯享网,很高兴认识大家。

目录

1.把队列用底层算法实现

2.方块舞

3.使用队列对数据快速排序

4.创建Person类完成要求


 

1. 把队列里面的方法用原始的方法实现

function Queue(){ this.dataStore = []; //进队列,从尾部添加数据 this.enqueue=function (element) { //this.dataStore.push(element); this.dataStore[this.dataStore.length]=element; } //从队列头部删除数据,并且获得这个数据 this.dequeue=function () { //1 获得头部的数据 var head = this.dataStore[0]; //2,删除数组头部的数据 var length = this.dataStore.length; for(var i=0;i<length-1;i++){ this.dataStore[i]=this.dataStore[i+1]; } //3,最后的数据置空 this.dataStore[length-1]=null; this.dataStore.length--; return head; } //获得队列最前面的数据 this.front=function(){ return this.dataStore[0]; } //获得队列最后面的数据 this.back=function () { return this.dataStore[this.dataStore.length-1]; } //依次返回当前队列的数据 this.toString=function () { return this.dataStore.toString(); } //判断当前队列是否为空 this.empty=function () { if(this.dataStore.length==0){ return true; } else{ return false; } } //遍历当前队列的数据 this.forEach=function (call) { var length = this.dataStore.length; for(var i=0;i<length;i++){ call(this.dataStore[i],i); } } }

讯享网

 

2.方块舞


讯享网

      当男男女女来到舞池,他们按照自己的性别排成两队。当舞池中有地方空出来时,选两个队列中的第一个人组成舞伴。他们身后的人各自向前移动一位,变成新的队首。当一对舞伴迈入舞池时,主持人会大声喊出他们的名字。当一对舞伴走出舞池,且两排队伍中有任意一队没人时,主持人也会把这个情况告诉大家。

思路:在这里我们使用的是数组存储跳舞的人的性别和姓名 ,通过调用队列的遍历方法,对数组里面的每个数组根据性别进行分组。在分组的同时,让当前数据进入相应的队列。在所有数据分组完毕后,通过循环判断男女两个队列是否为空,如果都不为空,那么,双方都要删除一个队首数据,再继续判断,直到有一个队列为空,表明此时有一方的人数不够了,输出相应的提示信息。

讯享网 <script src="Queue.js"></script> <script> //跳舞的人 var names = ["F Allison McMillan", " M Frank Opitz ", "M Mason McMillan ", "M Clayton Ruff", "F Cheryl Ferenback ", " M Raymond Williams", "F Jennifer Ingram ", "M Bryan Frazer", "M David Durr", "M Danny Martin", "F Aurora Adney"]; function Dancer(name, sex) { this.name = name; this.sex = sex; } function Grouping(female, male) { //1,遍历数据 var length = names.length; for (var i = 0; i < length; i++) { //2获得数组里面的数据,并且把两边的空格去掉 var dancerData = names[i].trim(); //3,获得第一个空格的下标位置 var index = dancerData.indexOf(' '); //4,获得开始到空格之间的数据 var sex = dancerData.substring(0, index); //5,空格后到结束的字符串 var name = dancerData.substring(index + 1, dancerData.length); //6,创建舞者 var dancer = new Dancer(name,sex); //7,是男的就放置到男队伍 if(sex=='F'){ female.enqueue(dancer); }else{ male.enqueue(dancer); } } } function dance(female, male) { while(!female.empty()&&!male.empty()){ console.log(female.dequeue().name+"和"+male.dequeue().name+"一起跳舞!") ; } } //男性舞队 var female = new Queue(); //女性舞队 var male = new Queue(); //分组 Grouping(female, male); //跳舞 dance(female, male); if(!female.empty()){ console.log(female.front().name+"在等待男舞伴"); } if(!male.empty()){ console.log(male.front().name+"在等待女舞伴"); } </script>

 

3.使用队列对数据快速排序

思路:对于0~99 的数字,基数排序将数据集扫描两次。第一次按个位上的数字进行排序,第二次按十位上的数字进行排序。每个数字根据对应位上的数值被分在不同的盒子里。

<script src="Queue.js"></script> <script> //先个位排序,再十位排序 let numbers=[]; for(var i=0;i<50;i++){ let buffer=Math.floor(Math.random()*90)+10; numbers.push(buffer); } let queues=[]; for(var i=0;i<10;i++){ let buffer=new Queue(); numbers.push(buffer); } function SortOne() { //获得数据长度 let length = numbers.length; //对数据进行个位排序 for (let i = 0; i < length; i++) { //获得具体数据 let buffer = numbers[i]; let index = numbers[i] % 10; console.log(queues[index]); queues[index].enqueue(numbers[i]); } delete numbers; numbers = []; for (var i = 0; i < 10; i++) { if(!queues[i].empty()){ queues[i].forEach(function (data) { numbers.push(data); }) } } return numbers; } function SortTen() { for (var i = 0; i < 10; i++) { queues[i].clear(); } //获得数据长度 let length = numbers.length; //对数据进行个位排序 for (let i = 0; i < length; i++) { //获得具体数据 let buffer = numbers[i]; let index = Math.floor(numbers[i] /10); queues[index].enqueue(numbers[i]); } delete numbers; numbers = []; for (var i = 0; i < 10; i++) { if(!queues[i].empty()){ queues[i].forEach(function (data) { numbers.push(data); }) } } return numbers; } console.log(SortOne().toString()); console.log(SortTen().toString()); </script> 

 

4.创建Person类完成要求

          添加person对象,不少于20个,当前银行只对存款上1000万的人服务

讯享网<script src="Person.js"></script> <script src="Queue.js"></script> <script> //1,创建对象 var queue = new Queue(); //2,准备数据 var psersons = []; for (var i = 0; i < 20; i++) { var name = "姓名" + i; var money = (Math.floor(Math.random() * 5) + 9) * 100; psersons[i] = new Person(name, money); console.log(name+"拥有"+money); } console.log("*"); while (psersons.length > 0) { queue.enqueue(psersons.shift()); } var buffer = queue.fliter(function (item, index) { if (item.money > 1000) { return true; } else { return false; } }); buffer.forEach(function (item) { console.log(item.money); }) </script>

 

小讯
上一篇 2025-03-13 09:39
下一篇 2025-04-08 20:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/125160.html