栈(Stack)结构
核心特性
先进后出(LIFO):仅操作栈顶元素(最后入栈的元素先出栈)
核心操作:入栈(push)、出栈(pop)、查看栈顶(peek)、判断空(isEmpty)
代码实现
js
class Stack {
constructor() {
this.items = []; // 基于数组存储数据
}
// 入栈(添加元素到栈顶)
push(item) {
this.items.push(item);
}
// 出栈(删除并返回栈顶元素)
pop() {
if (this.isEmpty()) return null;
return this.items.pop();
}
// 查看栈顶元素(不删除)
peek() {
if (this.isEmpty()) return null;
return this.items[this.items.length - 1];
}
// 判断栈是否为空
isEmpty() {
return this.items.length === 0;
}
// 获取栈的大小
size() {
return this.items.length;
}
// 清空栈
clear() {
this.items = [];
}
}适用场景
函数调用栈:JS 引擎用栈管理函数调用(如递归调用时,每次递归入栈,返回时出栈)
路由回退:const historyStack = new Stack()(push 当前路由,回退时 pop 上一个路由)
注意
基于数组实现的栈,push/pop是 O (1),若用unshift/shift(操作栈底)会变成 O (n),不推荐
