用js实现堆栈
使用数组实现堆栈
JavaScript 中可以通过数组的 push 和 pop 方法直接模拟堆栈的先进后出(LIFO)行为。
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 = [];
}
// 打印栈内容
print() {
console.log(this.items.toString());
}
}
使用对象实现堆栈
如果需要更高效的实现(避免数组的 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;
}
// 打印栈内容(按入栈顺序)
print() {
console.log(Object.values(this.items).toString());
}
}
示例用法
const stack = new Stack();
stack.push(10);
stack.push(20);
stack.push(30);
stack.print(); // 输出: 10,20,30
console.log(stack.pop()); // 输出: 30
console.log(stack.peek()); // 输出: 20
console.log(stack.size()); // 输出: 2
注意事项
- 时间复杂度:数组和对象实现的
push、pop、peek操作均为 O(1)。 - 边界条件:调用
pop或peek时需检查栈是否为空。 - 扩展功能:可根据需求添加
toArray()或toString()方法。







