JavaScript引用类型之Array数组的栈方法与队列方法

一、栈方法

ECMAScript数组也提供了一种让数组的行为类似与其他数据结构的方法。具体的来说,数组可以变现的向栈一样,栈就是一种可以限制插入和删除向的数据结构。栈是一种LIFO(Last In First Out先进后出)的数据结构,也就是最新添加的项最早被移出,ECMAScript为数组专门提供了push()和pop()方法,以便实现类似栈的行为。

1、push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度,代码如下:

<script>
    var colors=new Array();
    var count=colors.push("red","blue");
    alert(colors.toString()); //输出:red,blue
    alert(count);  //输出2
    count=colors.push("black");
    alert(count); //输出3
</script>

分析上面的代码发现,每次push完返回的都是最后一次push后数组的长度!

2、pop()方法则从数组末尾移除最后一项,减少数组的length,返回移除的项。代码如下:

<script>
    var colors=new Array();
    var count=colors.push("red","blue");
    var item=colors.pop();
    alert(item); //输出:blue
    alert(colors.length);//输出:1
</script>

二、队列方法

通过Array类型的push()和pop()方法我们可以模拟栈的后进先出,从上面的代码可以看出,而队列数据结构的访问规则是FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,在列表的前端移除项。由于push()是向数组末端添加项的方法,因此要模拟队列只需从数组前端取得项的方法。这个方法就是:

1、shift()   移除数组中的第一项并返回该项,同时数组长度减1 代码如下:

<script>
   //利用shift()和push()模拟队列  后面追加元素,前面移出元素
    var colors=new Array();
    var count=colors.push("red","blue");//推入两项
    alert(count); //输出:2
    count=colors.push("black");
    alert(count);  //输出:3
    var item=colors.shift();
    alert(item);//输出:red
    alert(colors.length);//输出:2
</script>

2、unshift()

ECMAScript还为数组提供了一个unshift()方法,顾名思义,该方法与shift()方法刚好相反,他是从顶端添加项,unshift()和pop()方法搭配,可以从反方向来模拟队列。代码如下:

<script>
    //利用unshift()和pop()方法模拟反向队列   前面追加元素,后面去除元素
    var colors=new Array("red","blue","green");
    var count=colors.unshift("blue");
    alert(count); //输出:4
    alert(colors.toString()); //输出:blue,red,blue,green  blue被追加到数组的最前端
    var item=colors.pop();
    alert(item); //输出:green    pop()方法将最后面一项green移出
    alert(colors.length); //输出:3
</script>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenjx85的技术专栏

leetcode-819-Most Common Word(词频统计)

3757
来自专栏编程

2017余额不足,Python来充值:迭代和生成器

时光虽然脚步轻轻,但它透过2018却悄然露出了狐狸尾巴,岁月的时钟显示2017已然余额不足。 怎么办呢?继续用Python来充值吧! Python的击出语法里,...

1865
来自专栏MasiMaro 的技术博文

C/C++中整数与浮点数在内存中的表示方式

在C/C++中数字类型主要有整数与浮点数两种类型,在32位机器中整型占4字节,浮点数分为float,double两种类型,其中float占4字节,而double...

1263
来自专栏LinkedBear的个人空间

唠唠SE的面向对象-09——interface接口

Java是单继承机制,那么一个类需要有多个操作并且来自不同类的时候,就需要接口来弥补这种缺点。

701
来自专栏九彩拼盘的叨叨叨

学习纲要:JavaScript 数据类型

701
来自专栏赵俊的Java专栏

由一道 Java finally 执行顺序的题引发的思考

2324
来自专栏大数据和云计算技术

算法基础:优先队列

算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第四篇《优先队列》,非常赞!希望对大家有帮助,大家会喜欢! 前面系列文章: 归并排序 #算法基础#...

3266
来自专栏梦魇小栈

重新介绍 JavaScript(JS全面系列教程)

为什么会有这一篇“重新介绍”呢?因为 JavaScript 堪称世界上被人误解最深的编程语言。虽然常被嘲为“玩具语言”,但在它看似简洁的外衣下,还隐藏着强大的语...

1572
来自专栏测试开发架构之路

C++之类和对象的特性

简介:C++并不是一个纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型的语言。 凡是以类对象为基本构成单位的程序称为基于对象的程序,再加上抽象、封装、...

3446
来自专栏有趣的Python

3-Linux C语言结构体-学习笔记

将#include <stdio.h>中stdio.h展开,将未注释的内容直接写入.i文件。

2861

扫码关注云+社区

领取腾讯云代金券