JavaScript可用数组方法模拟栈和队列:栈用push/pop实现后进先出,队列用push/shift实现先进先出;注意shift性能开销及操作语义统一,避免混用unshift/shift或遍历时修改数组长度。

JavaScript 中可以用数组的 push、pop、shift、unshift 方法轻松模拟栈和队列,无需额外类或库。
用数组模拟栈(后进先出 LIFO)
栈的核心操作是“入栈”(push)和“出栈”(pop),都作用于数组末尾,效率高且语义清晰。
-
入栈:用
arr.push(item)—— 在末尾添加元素 -
出栈:用
arr.pop()—— 移除并返回末尾元素 -
查看栈顶:直接访问
arr[arr.length - 1](不修改数组) -
判空:检查
arr.length === 0
例如实现括号匹配验证时,遇到左括号入栈,右括号时弹出并比对,就是典型栈应用。
用数组模拟队列(先进先出 FIFO)
队列需在一头入、另一头出。推荐用 push() 入队(尾部)、shift() 出队(头部),语义直观。
立即学习“Java免费学习笔记(深入)”;
-
入队:用
arr.push(item)—— 添加到末尾 -
出队:用
arr.shift()—— 移除并返回首个元素 -
查看队首:读取
arr[0] -
判空:同样用
arr.length === 0
注意:shift() 在内部需移动其余元素,大数据量时有性能开销;若频繁出队且长度大,可考虑用索引偏移+重置的循环数组思路,但日常使用数组足矣。
避免常见误区
有人用 unshift() 入队、pop() 出队,虽也满足 FIFO,但语义反直觉(把“头”当成了数组开头),易造成协作混乱。
- 统一约定:队列操作保持“尾进头出”,即
push + shift - 栈严格“同端进出”,即
push + pop,不要混用unshift/shift - 避免在循环中边遍历边
shift()或pop(),可能跳过元素;应先缓存长度或用 while
简单封装提升复用性(可选)
若项目中多处需要栈/队列逻辑,可封装轻量构造函数:
const Stack = () => ({ push: (x) => arr.push(x), pop: () => arr.pop(), top: () => arr[arr.length-1], empty: () => arr.length === 0 });const Queue = () => ({ enqueue: (x) => arr.push(x), dequeue: () => arr.shift(), front: () => arr[0], empty: () => arr.length === 0 });
这样调用更清晰,也便于后续替换底层实现。


















