队列——方块舞

 

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



 

我的代码:

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);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值