目录
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>
思路:对于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>
添加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>