js 实现堆栈
堆栈的基本概念
堆栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。主要操作包括:

- push:将元素压入栈顶。
- pop:移除并返回栈顶元素。
- peek:返回栈顶元素但不移除。
- isEmpty:检查栈是否为空。
- size:返回栈中元素数量。
使用数组实现堆栈
数组是 JavaScript 中实现堆栈的简单方式,利用原生方法如 push 和 pop 即可完成核心操作。

class Stack {
constructor() {
this.items = [];
}
push(element) {
this.items.push(element);
}
pop() {
if (this.isEmpty()) return "Stack is empty";
return this.items.pop();
}
peek() {
if (this.isEmpty()) return "Stack is empty";
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
size() {
return this.items.length;
}
clear() {
this.items = [];
}
}
// 示例用法
const stack = new Stack();
stack.push(10);
stack.push(20);
console.log(stack.pop()); // 输出 20
console.log(stack.peek()); // 输出 10
使用对象实现堆栈
对象实现方式通过维护索引和键值对来优化性能(避免数组的 shift/unshift 开销)。
class Stack {
constructor() {
this.count = 0;
this.items = {};
}
push(element) {
this.items[this.count] = element;
this.count++;
}
pop() {
if (this.isEmpty()) return "Stack is empty";
this.count--;
const result = this.items[this.count];
delete this.items[this.count];
return result;
}
peek() {
if (this.isEmpty()) return "Stack is empty";
return this.items[this.count - 1];
}
isEmpty() {
return this.count === 0;
}
size() {
return this.count;
}
clear() {
this.items = {};
this.count = 0;
}
}
注意事项
- 边界处理:
pop和peek需检查栈是否为空,避免操作未定义元素。 - 性能选择:数组实现简单,但对象实现更适合频繁的动态操作。
- 扩展功能:可添加
toString方法或迭代器支持遍历。
实际应用场景
- 函数调用栈:JavaScript 引擎使用堆栈管理函数执行上下文。
- 撤销操作:文本编辑器通过堆栈记录操作历史。
- 括号匹配:利用堆栈检查代码中的括号是否成对。
通过上述方法,可灵活实现堆栈以适应不同需求。






