2025-11-29-JavaScript中的数组方法与栈(Stack)和队列(Queue)的实现

462 个字
2 分钟
2025-11-29-JavaScript中的数组方法与栈(Stack)和队列(Queue)的实现

JavaScript 中的数组方法完全可以用来实现栈(Stack)和队列(Queue)的基本功能

这是因为栈和队列本质上是对“插入”和“删除”操作位置的限制,而数组的push、pop、unshift、shift这些方法正好提供了在两端高效操作的能力

先简单回顾一下这四种数组方法

方法操作位置操作类型返回值时间复杂度
push()尾部添加新长度O(1)
pop()尾部删除被删除元素O(1)
unshift()头部添加新长度O(n)
shift()头部删除被删除元素O(n)

1. 实现栈(Stack)——后进先出(LIFO,Last In First Out)#

主要使用数组的末尾操作实现:

操作数组方法示例代码时间复杂度
入栈(push)array.push(item)stack.push(1)O(1)
出栈(pop)array.pop()const item = stack.pop()O(1)

示例:

const stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
console.log(stack.pop()); // 3
console.log(stack.pop()); // 2
console.log(stack); // [1]

2. 实现队列(Queue)——先进先出(FIFO,First In First Out)#

方式一:头部删除 + 尾部插入#

操作数组方法示例代码时间复杂度
入队(enqueue)array.push(item)queue.push(1)O(1)
出队(dequeue)array.shift()const item = queue.shift()O(n)

问题:shift() 会导致数组所有元素向前移动,时间复杂度为 O(n),频繁操作时性能很差

方式二:尾部插入 + 头部删除#

操作数组方法示例代码时间复杂度
入队array.unshift(item)queue.unshift(1)O(n)
出队array.pop()const item = queue.pop()O(1)

同样存在 O(n) 操作

如果需要高效队列,可以使用双端队列实现或第三方库,有几种方式

  1. 使用两个数组模拟(常见面试实现):
    • 一个栈用于入队,一个栈用于出队,需要时倒腾
  2. 使用 JavaScript 的 Deque(双端队列)库
    • 如 js-deque 或其他库,支持 O(1) 的头尾操作
  3. ES6+ 原生替代:虽然没有内置 Queue,但可以用 Array + 手动索引模拟环形队列(较复杂)

分享到社交平台

将本文分享给你的朋友们

2025-11-29-JavaScript中的数组方法与栈(Stack)和队列(Queue)的实现
https://firefly.cuteleaf.cn/posts/2025-12-25-javascript中的数组方法与栈stack和队列queue的实现/
作者
Zhongye
发布于
2025-11-29
版权声明
CC BY-NC-SA 4.0

评论

Profile Image of the Author
Zhongye
南漂中
公告
新的博客站!旧站点传送门 zhongye1.github.io/Arknight-notes
音乐
专辑封面

音乐

暂无播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章数
142
分类数
14
标签数
214
总字数
339,690
运行天数
0
最后更新
0 天前

目录