队列的应用

目录

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值