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

解决此问题的思路是从放糖果的栈(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);

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

【js数据结构】栈解决佩兹糖果盒问题的更多相关文章

  1. js 数据结构-栈与队列

    /*[客栈的盘子/月井里的货物,后进先出]栈顶:最先入口/出口的位置栈底:最慢最晚出栈的位置*/ function Stack() { var item = []; //推(将货物推入月井) this ...

  2. js数据结构之栈、队列(数据结构与拉火车游戏)

    1.js实现队列的数据结构(先进先出) function Queue (array) { if(Object.prototype.toString.call(array)!="[object ...

  3. PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题)

    PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题) 一.总结 SplStack就是继承双链表(SplDoublyLinkedList)实 ...

  4. JS数据结构第四篇 --- 栈

    一.什么是数据结构栈 在数据结构中有一个栈结构,在内存空间中也有一个栈空间,这两个”栈“是两个不同的概念.这篇我们说的是数据结构中的栈.栈是一种特殊的线性表,特殊性在哪?就是只能在栈顶进行操作,往栈顶 ...

  5. 数据结构与算法 --- js描述栈

    js描述栈及栈的使用 栈的特性就是只能通过一端访问,这一段就是叫做栈顶.咖啡馆内的一摞盘子就是最形象的栈的例子: 根据栈的特性,就可以定义栈的一些特殊属性和方法;用js的描述栈的时候底层数据结构用的是 ...

  6. JS数据结构与算法——栈

    JS数据结构与算法--栈 1.栈结构概念 栈(Stack)是一种先进后出(LIFO Last in First out)的线性表,先进栈的将会比后进栈的先出栈. 栈的限制是仅允许在一端进行插入和删除运 ...

  7. (js描述的)数据结构[栈结构](2)

    (js描述的)数据结构[栈结构](2) 一.什么是栈结构 1.一种受限制的线性结构,这种结构可以基于数组来实现. 2.可以抽象成一个容器,上面的是栈顶,底下的是栈底.所以仅允许对栈顶进行操作, 二.栈 ...

  8. 用栈解决Largest Rectangle问题

    一问题描述 Given n non-negative integers representing the histogram's bar height where the width of each ...

  9. 常见JS(JavaScript)冲突解决方法

    1.一般JS冲突解决办法 a.最容易出现的就是js的命名冲突 ①.变量名冲突 变量有全局变量和局部变量当全局变量变量和局部变量名称一致时,就会js冲突,由于变量传递数值或地址不同就会产生JavaScr ...

随机推荐

  1. SQL2008实现数据库自动定时备份——维护计划

    在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员 每天守到晚上1点去备份数据库.要实现数据库的 ...

  2. firefox浏览器相关的2个坑

    今天遇到一个bug,找回密码的功能在google浏览器正常,在firefox浏览器不正常.在排查该bug的过程中遇到2个坑.先总结一下: 1.firefox浏览器无法debug,“脚本”面板提示:本页 ...

  3. JavaScript 例题延迟10s 自动手动换图

    <style type="text/css"> * { margin:0px auto; padding:0px; font-family:"微软雅黑&quo ...

  4. HTML__post 和 get区别【URL】

    一.get和post的区别: 表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的U ...

  5. python书籍推荐

    python书籍推荐列表: 技巧:关于如何在windows平台上行获取目录下的文件名称.(我的python书籍的位置E:\Python\Python_book) D:\>e: E:\>cd ...

  6. phpcms基础知识和配置

    一.设置界面 1.站点设置:相当于服务器上的站点 (1)站点修改:“关键词”和“描述”的修改,便于网络优化和搜索引擎对本网站的搜索. (2)模板的修改,可以自己加模板,引用自己模板 2.基本设置:所有 ...

  7. 编写一个飞行棋项目(C#)遇到几个问题:

    在写程序中遇到如下问题:如果有人知道,请您一定要指点迷津.小白. 1.在运行暂停功能时,这个暂停功能可以实现,但是无法显示提示信息. case 3: Console.Clear(); Program. ...

  8. protocol error, got 'n' as reply type byte

    centos6.5上安装redis3.2版本,本地访问redis报错protocol error, got 'n' as reply type byte 解决办法 在redis配置文件redis.co ...

  9. AWT与Swing的区别

    AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关 ...

  10. Oracle 生成一张测试表并插入随机数据

    --生成随机表 --CREATE table scott.One_Million as ( SELECT ROWNUM AS T_ID, TRUNC(DBMS_RANDOM.VALUE(, )) 年龄 ...