【js数据结构】栈解决佩兹糖果盒问题

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

解决此问题的思路是从放糖果的栈(stack)中,将不喜欢的糖果放在一个栈(getColorStack)里,将其他糖果放入一个栈(setColorAtack),最后取完糖果后,将盛装其他糖果的栈(setColorAtack)中的糖果逐个将其放入原来的栈(stack)中,其位置将不会变化。如下图所示:

那么对比一下原来的stack与函数处理过的stack

  

顺序没有改变!

实现代码如下,栈的构造函数见上篇文章:

var  sweetBox = new Stack();
sweetBox.push('red');
sweetBox.push('yellow');
sweetBox.push('red');
sweetBox.push('yellow');
sweetBox.push('white');
sweetBox.push('yellow');
sweetBox.push('white');
sweetBox.push('yellow');
sweetBox.push('white');
sweetBox.push('red');

function getColor(element, stack)
{
    var getColorStack = new Stack();
    var setColorStack =new Stack();
    while(stack.len()>0)
    {
        if(stack.peek() == element)
        {
            getColorStack.push(element);
            stack.pop();
        }
        else{
            setColorStack.push(stack.peek());
            stack.pop();
        }
    }
    while(setColorStack.len()>0)
    {
        stack.push(setColorStack.peek());
        setColorStack.pop();
    }
    console.info(stack.peek());
}
getColor('red',sweetBox);

  文章如有错误,望大家指出,小女子这厢有礼了 >.<

原文地址:https://www.cnblogs.com/xiabaoying/p/6561066.html