4.2 栈数据结构
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同 一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈的使用场景:在编程语言的编译器和内存中保存变量、方法调用等,也被用于浏览器历史记录 (浏览器的返回按钮)。
4.2.1 创建一个基于数组的栈
创建一个类来表示栈。从创建一个 stack-array.js 文件并声明 Stack 类开始。
class Stack {
constructor() {
this.items = []; // {1}
}
}
选择数组(行{1})来保存栈里的元素。由于栈遵循 LIFO 原则,需要对元素的插入和删除功能进行限制。接下来, 要为栈声明一些方法。
push(element(s)):添加一个(或几个)新元素到栈顶。
pop():移除栈顶的元素,同时返回被移除的元素。
peek():返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
isEmpty():如果栈里没有任何元素就返回 true,否则返回 false。
clear():移除栈里的所有元素。
size():返回栈里的元素个数。该方法和数组的 length 属性很类似。
4.2.2 向栈添加元素
push方法负责往栈里添加新元素,有一点很重要:该方法只添加元素到栈顶,也就是栈的末尾。
push(element) {
this.items.push(element);
}
4.2.3 从栈移除元素
pop 方法主要用来移除栈里的元素。栈遵从 LIFO 原则,因此移 出的是最后添加进去的元素。
pop() {
return this.items.pop();
}
4.2.4 查看栈顶元素
peek 方法将返回栈顶的元素(栈里最后添加的元素)。
peek() {
return this.items[this.items.length - 1];
}
4.2.5 检查栈是否为空
isEmpty方法如果栈为空的话将返回 true,否则就返回 false。
isEmpty() {
return this.items.length === 0;
}