栈--佩兹糖果盒

现实生活中栈的一个例子是佩兹糖果盒。想象一下你有一盒佩兹糖果,里面塞满了红色、黄色和白色的糖果,但是你不喜欢黄色的糖果。使用栈(有可能用到多个栈)写一段程序,在不改变盒内其他糖果叠放顺序的基础上,将黄色糖果移出。

看到这个问题后,你的第一个想法是什么?

其实,仔细分析,这个问题的思路还是比较清晰的,无非就是:

1、用一个栈存放我本来的糖果;

    //糖的数量
    var num=20;
    //创建糖盒
    var box = new Stack();
    //糖的数组
    var sugars=['红','黄','白'];
    //根据数量创建糖,并且放到糖盒
    for(var i=0;i<num;i++){
        var random = Math.floor(Math.random()*3);
        box.push(sugars[random]);
    }

2、遍历出糖果,将从栈中筛选出黄色糖果;

3、将筛选出来的糖果,放到另一个栈中;

    //糖的缓存
    var buffer = new Stack();

    box.forEach(function (sugar) {
        if(sugar!='黄'){
            buffer.push(sugar);
        }
    })

4、由于不能改变糖果叠放次序,所以,将我之前的栈清空,将第二栈中的数据遍历回第一个栈。

   //清空栈内的数据
    box.clear();

    //遍历未筛选糖
    buffer.forEach(function (sugar) {
        box.push(sugar);
    })

    console.log("*************************************");

    //遍历筛选后的糖
    box.forEach(function (sugar) {
        console.log(sugar);
    })

在解决这个问题前,把我们需要用的栈的基本方法简单例举如下:

这里说明一下dataStore是申明的数组this.dataStore=[ ]

(1)进栈

this.push = function (data) {
        //获得当前下标
        var index = this.dataStore.length;
        //添加数据
        this.dataStore[index] = data;
        // this.dataStore.push(data);
    }

(2)出栈

this.pop = function () {
        return this.dataStore.pop();
    }

(3)清空

this.clear = function () {
        delete this.dataStore;
        this.dataStore = [];
    }

(4)遍历

this.forEach = function (call) {
        var length = this.dataStore.length;
        for (var i = length - 1; i >= 0; i--) {
            call(this.dataStore[i]);
        }
    }

前面我们已经梳理过佩兹糖果盒的步骤,现在我简单将下面代码解释一下:

box就是之前所说的装糖果的第一个栈,buffer是暂存删除后糖果的第二个栈,其他的想必也不用我多说了。

//糖的数量
    var num=20;
    //创建糖盒
    var box = new Stack();
    //糖的数组
    var sugars=['红','黄','白'];
    //根据数量创建糖,并且放到糖盒
    for(var i=0;i<num;i++){
        var random = Math.floor(Math.random()*3);
        box.push(sugars[random]);
    }

    //糖的顺序
    box.forEach(function (sugar) {
        console.log(sugar);
    })

    //糖的缓存
    var buffer = new Stack();

    box.forEach(function (sugar) {
        if(sugar!='黄'){
            buffer.push(sugar);
        }
    })

    //清空栈内的数据
    box.clear();

    //遍历未筛选糖
    buffer.forEach(function (sugar) {
        box.push(sugar);
    })

    console.log("*************************************");

    //遍历筛选后的糖
    box.forEach(function (sugar) {
        console.log(sugar);
    })

猜你喜欢

转载自blog.csdn.net/weixin_38629529/article/details/81166356