JavaScript栈与队列

一、栈方法

ECMAScript给数组提供几个方法,让它看起来像是另外一种数据结构。数组对象可以像栈一样,也就是一种限制插入和删除项的数据结构。

栈是一种后进先出(LIFO, Last-In-First-Out)的结构,也就是最近添加的项先被删除。数据项的插入(称为推入,push)和删除(称为弹出,pop)只在栈的一个地方发生,即栈顶。ECMAScript数组提供了push()和pop()方法,以实现类似栈的行为。

push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。pop()方法则用于删除数组的最后一项,同时减少数组的length值,返回被删除的项。来看下面的例子:

let colors = new Array();       // 创建一个数组
let count = colors.push("red", "green");   // 推入两项
alert(count);    // 2

count = colors.push("black");   // 再推入一项
alert(count);     // 3

let item = colors.pop();       // 取得最后一项
alert(item);      // black
alert(colors.length);       // 2

栈方法可以与数组的其他任何方法一起使用,如下例所示:

let colors = ["red", "blue"];
colors.push("brown");          // 再添加一项
colors[3] = "black";           // 添加一项
alert(colors.length);          // 4

let item = colors.pop();      // 取得最后一项
alert(item);                     // black

二、队列方法

就像栈是以LIFO形式限制访问的数据结构一样,队列以先进先出(FIFO, First-In-First-Out)形式限制访问。队列在列表末尾添加数据,但从列表开头获取数据。

因为有了在数据末尾添加数据的push()方法,所以要模拟队列就差一个从数组开头取得数据的方法了。这个数组方法叫shift(),它会删除数组的第一项并返回它,然后数组长度减1。使用shift()和push(),可以把数组当成队列来使用:

let colors = new Array();      // 创建一个数组
let count = colors.push("red", "green");   // 推入两项
alert(count);     // 2

count = colors.push("black"); // 再推入一项
alert(count);    // 3

let item = colors.shift();   // 取得第一项
alert(item);     // red
alert(colors.length);     // 2

ECMAScript也为数组提供了unshift()方法。顾名思义,unshift()就是执行跟shift()相反的操作:在数组开头添加任意多个值,然后返回新的数组长度。

通过使用unshift()和pop(),可以在相反方向上模拟队列,即在数组开头添加新数据,在数组末尾取得数据,如下例所示:

let colors = new Array();        // 创建一个数组
let count = colors.unshift("red", "green");   // 从数组开头推入两项
alert(count);      // 2

count = colors.unshift("black");   // 再推入一项
alert(count);      // 3

let item = colors.pop();   // 取得最后一项
alert(item);    // green
alert(colors.length);      // 2

获取更多资源,请关注:【全面资源集

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值