随心情更新的学习笔记——JS代码之栈的佩兹的糖果盒

这是有上期,没下期,学习看心情,更新看随机的老王的学习笔记,好好看,没有下期了……

 

佩兹的糖果盒

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

 

我们首先写个函数用来随机生成颜色,push到栈中去。

function input(stack) {
        for (var i=0;i<10;i++){
            var random = Math.floor(Math.random()*3);
            if(random==0){
                stack.push("红");
            }else if(random==1){
                stack.push("白");
            }else{
                stack.push("黄");
            }
        }
    }

 

要完成佩兹糖果盒我们需要两个栈才能完成,一个是装着糖果的盒子,另一个是空盒子用来腾糖果用的。

我们遍历糖果盒(栈1),每当遇到我们不喜欢的颜色的时候就扔掉(pop()方法),遇到喜欢的颜色,我们就取出,放到空盒子里,然后在遍历原来的那个空盒子(栈2),把其中的糖果放到原先的糖果盒(栈1)中去,这样糖果盒中糖果的顺序就和原来的一样了。

    function pickOut(stack1,stack2) {
        while(!stack1.empty()){
            if(stack1.peek()=="黄"){
                stack1.pop();
            }else{
                stack2.push(stack1.pop());
            }
        }
        while (!stack2.empty()){
            stack1.push(stack2.pop());
        }
    }

 

######################################附上完整代码########################################

function input(stack) {
        for (var i=0;i<10;i++){
            var random = Math.floor(Math.random()*3);
            if(random==0){
                stack.push("红");
            }else if(random==1){
                stack.push("白");
            }else{
                stack.push("黄");
            }
        }
    }

    function pickOut(stack1,stack2) {
        while(!stack1.empty()){
            if(stack1.peek()=="黄"){
                stack1.pop();
            }else{
                stack2.push(stack1.pop());
            }
        }
        while (!stack2.empty()){
            stack1.push(stack2.pop());
        }
    }

    var stack1 = new Stack();
    var stack2 = new Stack();

    stack1.peek();

    input(stack1);


    stack1.forEach(function (item) {
        console.log(item);
    });

    pickOut(stack1,stack2);

    console.log("丢掉黄色后:");

    stack1.forEach(function (item) {
        console.log(item);
    });

 

#########################################老师的代码###############################################

 

    //糖的数量
    var num = 50;
    //创建糖盒
    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 (item) {
        console.log(item);
    })

    //糖盒的缓存
    var buffer = new Stack();
    //遍历糖盒里面的糖,把非黄色的糖按照顺序放到新的糖盒
    box.forEach(function (sugar) {
        if(sugar!='黄'){
            buffer.push(sugar);
        }
    })

    //老糖盒清空
    box.clear();
    //把新糖盒的糖按照顺序返回老糖盒
    var buffer = new Stack();
    buffer.forEach(function (sugar) {
          box.push(sugar);

    })

    console.log("#############");

    box.forEach(function (item) {
        console.log(item);
    })

 

注明,其中的栈的代码用的是随心情更新的学习笔记——JS代码之链表解决括号不匹配中最后附上的那段代码,完全可以用自己的代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值