当男男女女来到舞池,他们按照自己的性别排成两队。当舞池中有地方空出来时,选两个队列中的第一个人组成舞伴。他们身后的人各自向前移动一位,变成新的队首。当一对舞伴迈入舞池时,主持人会大声喊出他们的名字。当一对舞伴走出舞池,且两排队伍中有任意一队没人时,主持人也会把这个情况告诉大家。
我的代码:
function Dancer(sex, name) {
this.sex = sex;
this.name = name;
}
let queue = new Queue();
let queueSexF = new Queue();
let queueSexM = new Queue();
//将性别和名字放入Dancer中
let dancer2 = new Dancer("F", "Allison McMillan");
let dancer3 = new Dancer("M", "Frank Opitz");
let dancer4 = new Dancer("M", "Mason McMillan");
let dancer5 = new Dancer("M", "Clayton Ruff");
let dancer6 = new Dancer("F", "Cheryl Ferenback");
let dancer7 = new Dancer("M", "Raymond Williams");
let dancer8 = new Dancer("F", "Jennifer Ingram");
let dancer9 = new Dancer("M", "Bryan Frazer");
let dancer10 = new Dancer("M", "David Durr");
let dancer11 = new Dancer("M", "Danny Martin");
let dancer12 = new Dancer("F", "Aurora Adney");
queue.enqueue(dancer2);
queue.enqueue(dancer3);
queue.enqueue(dancer4);
queue.enqueue(dancer5);
queue.enqueue(dancer6);
queue.enqueue(dancer7);
queue.enqueue(dancer8);
queue.enqueue(dancer9);
queue.enqueue(dancer10);
queue.enqueue(dancer11);
queue.enqueue(dancer12);
//遍历队列 将人以性别分为两列
queue.forEach(function (dancer) {
if (dancer.sex == 'F')
queueSexF.enqueue(dancer);
if (dancer.sex == 'M')
queueSexM.enqueue(dancer);
});
//两列各出一人
while(!queueSexF.empty() && !queueSexM.empty()){
console.log("女:"+queueSexF.dequeue().name,"男:"+queueSexM.dequeue().name);
}
if(!queueSexM.empty()){
console.log(queueSexM.front().name+"正在等待");
}
if(!queueSexF.empty()){
console.log(queueSexF.front().name+"正在等待");
}
老师的代码:
//跳舞的人
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+"在等待女舞伴");
}
公共:Queue.js
function Queue(){
this.dataStore = [];
//进队列,从尾部添加数据
this.enqueue=function (element) {
this.dataStore.push(element);
}
//从队列头部删除数据,并且获得这个数据
this.dequeue=function () {
return this.dataStore.shift();
}
//获得队列最前面的数据
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);
}
}
}