JavaScript 模拟堆栈和队列操作的方法

为实现数组的动态操作,从JavaScript 1.2+和JScript 5.5+开始,Array 对象提供了诸如pop()、push()、unshift()、shift()等方法来动态添加和删除数组元素。

先来了解两个抽象的数据类型:

堆栈(LIFO):用于以“后进先出”的顺序存储数据的结构。在读取堆栈的时候,最后存入的数据最先被读取出来;

队列(FIFO):用于以“先进先出”的顺序储存数据的结构。在读取队列的时候,最先存入的数据最先被读取出来。

其中 pop()方法模拟堆栈的“压栈”动作,将数组中最后一个元素删除,并将该元素作为操作的结果返回,同时更新数组的length 属性;

push()方法模拟堆栈的“出栈”动作,将以参数传入的元素按参数顺序添加到数组的尾部,并将插入的元素作为操作的结果返回,同时更新数组的length 属性。

unshift()、shift()方法与pop()、push()方法相对,都是删除和添加数组元素,仅仅是删除和添加目标的位置不同,前者与后者相反方向,即从数组的第一个元素开始操作,后面的元素将分别向前和向后移动,数组的length 属性自动更新。

考察如下的代码:[code]<! DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”
http://www.w3.org/TR/REC-html140/strict.dtd”>

Sample Page!
[/code]程序运行结果如图所示。

Array 对象提供的模拟堆栈和队列进行数组元素添加、删除的方法,使用非常简单。

它致命的缺陷就是只能操作数组的头部或末端的数组元素,不能进行任意位置数组元素的添加和删除操作,下面介绍可以在数组中任意位置执行该操作的splice()方法。

注意:Array 对象的pop()、push()、unshift()、shift()等添加和删除数组元素的方法,虽模拟了堆栈和队列的基本动作,但并不能因此而将数组看成堆栈或队列。