文档章节

JavaScript的栈方法和队列方法

程序员小智
 程序员小智
发布于 2016/04/06 12:30
字数 881
阅读 5
收藏 0

一,栈方法

    ECMAScript 数组提供了一种让数组的行为类似于其他数据结构的方法。

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

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

    pop()方法没有入参,它是从数组末尾移除最后一项,并返回最后移除的项,同时,减少数组的length值。

    

    示例:

    //创建一个数组
    var colors = new Array();
    var count = colors.push("red","green");//推入两项
    alert(count);//弹出push推入的返回值   2
    alert(colors.length);//弹出数组colors的length值    2


    count = colors.push("black");//再推入一项
    alert(count);//弹出push推入的返回值   3
    alert(colors.length);//弹出数组colors的length值    3


    //使用pop方法获取数组的最后一项的值
    var last_item = colors.pop();
    alert(last_item);//   "black"


    alert(count);//这个时候的count还是3
    alert(colors.length);//数组colors的length值为2

    ECMAScript可以将栈方法和数组其他方法连用。

    示例:

    //创建一个数组
    var colors = ["red","blue"];
    colors.push("brown");//向数组的末尾推入一项
    alert(colors.length);//这个时候数组的length值为3
    colors[3] = "black";//将数组的角标为3的位置即数组中第四项设置为“black”
    alert(colors.length);//这个时候数组的length值为4


    var item= colors.pop();//取得数组最后一项的值
    alert(item);//“black”
    alert(colors.length);//这个时候数组的length值为3

二,队列方法

    栈数据结构的访问规则是LIFO,而队列数据结构的访问规则是FIFO(First-In-First-Out,即先进先出)。队列在列表的末端添加项,从列表的前端移除项。

    ECMAScript提供了push()和shift()方法来控制队列的的行为;

    push()方法是向列表的末尾添加项(与栈的push方法一样);shift()方法是从列表的最前端移除一项,并返回移除项,同时列表的length减1。

    示例:

    //创建一个数组
    var colors = new Array();
    var count = colors.push("red","green");
    alert(count);//弹出数组push返回的值   2
    alert(colors.length);//弹出数组的length值   2


    count = colors.push("black");//向数组末尾再推入一项
    alert(count);//这个时候push返回的值为3
    alert(colors.length);//这个时候数组的length值为3


    var first_item = colors.shift();//取得数组的最前端的值
    alert(first_item);//"red"  数组的第一项值变为"green"
    alert(colors.length);//这个时候数组的length值为2

    ECMAScript还提供了一个unshift()方法;顾名思义,unshift()与shift()的用途相反;unshift()能够从数组的前端添加任意个项并返回新数组的长度。因此,同时使用unshift()和pop()方法,可以从相反的方向来模拟队列。即数组的前度添加项,从数组的末端移除项。

    示例:

    //创建一个数组

    var colors = new Array();

    var count = colors.unshift("red","green");//从数组的最前端推入两项

    alert(count);//返回数组推入的两项的值 2


    count = colors.unshift("black");//再向数组的最前端推入一项

    alert(count);//这时数组推入项返回的值为3


    var last_item = colors.pop();//取得输入最后一项的值

    alert(last_item);//"green"

    alert(colors.length);//这个时候数组的length值为2


    var first_item = colors.shift();//取得数组最前端的值

    alert(first_item);//"black"

    alert(colors.length);//这时数组的length值为1


    

© 著作权归作者所有

程序员小智
粉丝 1
博文 7
码字总数 4287
作品 0
浦东
程序员
私信 提问
JavaScript 执行机制-浏览器事件循环

大多数时候,我们去面试,都会遇到,让你说出一段代码的执行结果,或者说出其执行顺序。因为javascript是单线程的。 关于javascript javascript 是一门单线程语言,最新的H5中提出了webwork...

legendaryedu
04/04
0
0
[翻译]理解异步JavaScript

写在文章前 这篇文章是翻译自Sukhjinder Arora的 Understanding Asynchronous JavaScript。这篇文章描述了异步和同步JavaScript是如何在运行环境中,使用调用栈,消息队列,作业队列,以及事...

YukiSong
2018/12/10
0
0
【译】理解异步 JavaScript-学习JavaScript是怎么工作的

原文地址:Understanding Asynchronous JavaScript 原文作者:Sukhjinder Arora 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:H246802 校对者:ElizurHz, Yangfan...

H246802
01/05
0
0
异步 JavaScript - 事件循环

简评:如果你对 JavaScript 异步的原理感兴趣,这里有一篇不错的介绍。 在介绍 JavaScript 异步执行之前先来了解一下, JavaScript 同步代码是如何执行的。 这里有两个概念需要了解: 执行上...

极光推送
2018/12/05
11
0
【Javascript】探究javascript中的堆/栈/任务队列与并发模型 event loop的关系

堆/栈/队列 在javascript中,存在和 ,程序中函数依次进入栈中等待执行,若执行时遇到异步方法,该异步方法会被添加到用于回调的中,【即JavaScript执行引擎的单线程拥有一个调用栈、内存堆和一个...

AwesomeDevin
05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
52分钟前
8
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
7
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
11
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部