栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素就接近栈底。
栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。
栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元 素,必须先拿掉上面的元素。
栈的实现
用数组 dataStore 保存栈内元素,构造函数将其初始化为一个空数组。变量 top 记录 栈顶位置,被构造函数初始化为 0,表示栈顶对应数组的起始位置 0。如果有元素被压入 栈,该变量的值将随之变化。
function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; }
push() 方法:当向栈中压入一个新元素时,需要将其保存在数组中变量 top 所对应的位置,然后将 top 值加 1,让其指向数组中下一个空位置。
function push(element) { this.dataStore[this.top++] = element; }
pop() 方法:与 push() 方法相反——它返回栈顶元素,同时将变量 top 的值减 1
function pop() { return this.dataStore[--this.top]; }
peek() 方法:返回数组的第 top-1 个位置的元素,即栈顶元素。如果对一个空栈调用 peek() 方法,结果为 undefined。这是因为栈是空的,栈顶没有任何 元素。
pop() 方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek() 方法则只返回栈顶元素,而不删除它。
function peek() { return this.dataStore[this.top-1]; }
length() 方法:通过返回变量 top 值的方式返回栈 内的元素个数
function length() { return this.top; }
clear()方法:将变量 top 的值设为 0,清空栈
function clear() { this.top = 0; }
使用栈解决问题举例:判断一个字符串是否是回文
您可能感兴趣的文章:
相关文章
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。我采用的是一个非常流行的库require.js感兴趣的朋友可以了解下啊
2013-01-01利用空闲几天把《JavaScript权威指南》安静的读了一篇。真是一本好书呀!呵呵,这句话见的太多了。好在什么地方呢?听我慢慢道来。
2008-12-12这篇文章主要介绍了javascript将相对路径转绝对路径示例,这里介绍的其实本质上是两种方法,通过创建DOM或通过JavaScript计算,需要的朋友可以参考下
2014-03-03在JS中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数,可以写一个类似in_array()函数功能的方法
2012-12-12在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。下面这篇文章主要介绍了关于Javascript函数中的arguments面貌以及如何转化为数组的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
2017-02-02优化JavaScript脚本的性能的几个注意事项...
2006-12-12这篇文章主要介绍了JavaScript中length属性的使用方法,是JS入门学习中的基础知识,需要的朋友可以参考下
2015-06-06这篇文章主要介绍了Javascript堆排序算法及其示例,非常实用,需要的朋友可以参考下
2014-12-12这篇文章主要介绍了JavaScript中的getTime()方法使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下
2015-06-06这篇文章主要介绍了Javascript 普通函数和构造函数的区别的相关资料,需要的朋友可以参考下
2016-11-11