JavaScript中栈和队列是基于数组等原生语法实现的LIFO和FIFO线性结构;栈用push/pop实现O(1)操作,队列优选索引偏移法避免shift的O(n)开销,二者广泛应用于DFS/BFS、事件循环等场景。

JavaScript 数据结构是指用 JavaScript 语言组织、存储和操作数据的方式,它不是语言内置的“类库”,而是基于原生语法(如数组、对象、函数)构建的逻辑模型。栈和队列是两种基础的线性数据结构,它们的核心区别在于数据进出的规则:栈是后进先出(LIFO),队列是先进先出(FIFO)。
用数组实现栈(Stack)
栈常用 push() 和 pop() 操作模拟入栈和出栈,时间复杂度均为 O(1)。为保证封装性和语义清晰,建议封装成类或构造函数。
- 定义一个
Stack类,内部用数组存储元素 - 提供
push(item):向数组末尾添加元素 - 提供
pop():移除并返回数组末尾元素;若为空,可返回undefined或抛错 - 补充辅助方法:
peek()(查看栈顶)、isEmpty()(判断是否为空)、size()(返回长度)
示例:
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
size() {
return this.items.length;
}
}登录后复制
用数组实现队列(Queue)
队列需支持从一端入、另一端出。若只用 push() 和 shift(),shift() 在数组头部删除会导致 O(n) 时间复杂度。更优做法是用双指针模拟(类似循环队列思想),或直接使用数组 + 索引管理避免频繁移动元素。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java js 浏览器 栈 ai 区别 键值对 封装性
还木有评论哦,快来抢沙发吧~