现实生活中栈的一个例子是佩兹糖果盒。 想象一下你有一盒佩兹糖果, 里面塞满了红色、 黄色和白色的糖果, 但是你不喜欢黄色的糖果。 使用栈( 有可能用到多个栈) 写一段程序, 在不改变盒内其他糖果叠放顺序的基础上, 将黄色糖果移出
取糖果放入栈,糖果的顺序情况如下图:
解决此问题的思路是从放糖果的栈(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);
文章如有错误,望大家指出,小女子这厢有礼了 >.<