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或splice操作带来的性能问题,适合高频操作场景。
class Stack {
constructor() {
this.items = {};
this.count = 0;
}
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;
}
}
// 使用示例
const stack = new Stack();
stack.push(30);
stack.push(40);
console.log(stack.pop()); // 输出 40
console.log(stack.peek()); // 输出 30
堆栈的应用场景
- 函数调用栈:JavaScript引擎使用堆栈管理函数调用。
- 撤销操作:如文本编辑器的撤销功能通过堆栈记录操作历史。
- 括号匹配:检查表达式中的括号是否成对出现。
- 进制转换:将十进制数转换为其他进制。
示例:括号匹配校验
利用堆栈检查字符串中的括号是否有效匹配。
function isBalanced(expr) {
const stack = new Stack();
const map = {
'(': ')',
'[': ']',
'{': '}'
};
for (let char of expr) {
if (map[char]) {
stack.push(char);
} else if (char === ')' || char === ']' || char === '}') {
if (stack.isEmpty() || map[stack.pop()] !== char) {
return false;
}
}
}
return stack.isEmpty();
}
console.log(isBalanced("({[]})")); // true
console.log(isBalanced("({[)]}")); // false
性能注意事项
- 数组实现:
push和pop操作的时间复杂度为O(1),但数组动态扩容可能偶尔导致O(n)时间。 - 对象实现:所有操作均为O(1),但代码稍复杂,适合对性能要求严格的场景。






