1.栈的基础知识
1.1 栈的特征
栈(Stack):具有一定操作约束的线性表,只在一端(栈顶,Top)做插入(Push)、删除(Pop),不可操作的一端称为栈底(Bottom)。后进先出(Last In First Out, LIFO),若栈中没有元素则称为空栈。
- 栈的顺序存储实现(基于数组):栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。
- 栈的链式存储实现(基于链表):栈的链式存储结构实际就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。Top只能在链表首端。
栈可以用于表达式求值,如后缀表达式求值、中缀表达式求值、函数调用及递归实现、深度优先搜索、回溯算法等
栈的常用操作主要有:
push(E)
:增加一个元素E
pop()
:弹出一个栈顶元素peek()
:显示栈顶元素,但是不出栈empty()
:判断栈是否为空
在设计栈时,不管用数组还是链表,都需要实现上面几个方法。
2.JavaScript中基于数组实现栈
代码如下:
const stack = []; // 新建一个数组
// 如果规定数组尾端为栈顶,首端为栈底
// 用下面几个方法实现后进先出的规定
stack.push(); // 将指定的元素添加到数组的末尾,并返回新的数组长度
stack.pop(); // 从数组中删除最后一个元素,并返回该元素的值
satck.at(-1) // 返回数组末尾元素
// 判断是否为空栈
let isEmpty = function(stack) {
if (stack.length === 0) return false;
else return true;
}
// 此外,JavaScript的数组类型还有下面的方法
stack.shift(); // 从数组中删除第一个元素,并返回该元素的值
stack.unshift(); // 将指定元素添加到数组的开头,并返回数组的新长度