栈是一种遵从**后进先出(LIFO)**原则的有序集合。新添加的或待删除的元素都保存在栈的 同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
1.ES5方法实现“栈”类
我们将创建一个类来表示栈。先声明这个类的构造函数:
function Stack() {
//各种属性和方法的声明
}
然后,我们需要一种数据结构来保存栈里的元素。可以选择数组:
this.dataStore = [];
接下来,要为我们的栈声明一些方法。
top
:指针,指向栈顶(和数组的length相等,所以arr[top]
没有元素)。
push(element(s))
:添加一个(或几个)新元素到栈顶。
pop()
:移除栈顶的元素,同时返回被移除的元素。
peek()
:返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返 回它)。
size()
:返回栈里的元素个数。这个方法和数组的length属性很类似。
注意:
1,这些方法在构造函数外定义可以避免每次实例化的时候方法的重新声明,减少占用内存,
2,在这些方法里,使用this指针是可以访问到构造函数里面的变量的,因为this在实例化的时候,就指向了实例化的新对象,通过新对象调用这些方法的时候,this也会指向这个新对象
ES5实现一个栈类:
function Stack() {
this.dataStore = []; //数组 dataStore 保存栈内元素
thi