这是有上期,没下期,学习看心情,更新看随机的老王的学习笔记,好好看,没有下期了……
佩兹的糖果盒
现实生活中栈的一个例子是佩兹糖果盒。想象一下你有一盒佩兹糖果,里面塞满了红色、黄色和白色的糖果,但是你不喜欢黄色的糖果。使用栈(有可能用到多个栈)写一段程序,在不改变盒内其他糖果叠放顺序的基础上,将黄色糖果移出。
我们首先写个函数用来随机生成颜色,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代码之链表解决括号不匹配中最后附上的那段代码,完全可以用自己的代码。