登录
首页 >  文章 >  前端

JS数组实现栈与队列方法详解

时间:2025-12-29 22:17:08 150浏览 收藏

小伙伴们有没有觉得学习文章很有意思?有意思就对了!今天就给大家带来《JS数组实现栈和队列方法详解》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

JavaScript用数组实现栈和队列:栈用push/pop实现LIFO,队列用push/shift实现FIFO;为优化性能,高效队列可用双指针模拟,所有操作均为O(1)。

JavaScript中如何实现栈和队列_数组实现方式

JavaScript 中用数组实现栈和队列非常直接,核心在于控制元素的插入和删除位置——栈是“后进先出”(LIFO),队列是“先进先出”(FIFO)。数组原生方法刚好能高效支持这两种行为,无需额外封装类也能快速上手。

用数组实现栈(LIFO)

栈只允许在一端(通常是末尾)进行压入(push)和弹出(pop),JavaScript 数组的 push()pop() 方法天然匹配这一规则。

  • 入栈:用 arr.push(item) 添加到末尾
  • 出栈:用 arr.pop() 移除并返回末尾元素
  • 查看栈顶:直接访问 arr[arr.length - 1](不修改数组)
  • 判空:检查 arr.length === 0

示例:

const stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
console.log(stack.pop()); // 2
console.log(stack[stack.length - 1]); // 1(栈顶)

用数组实现队列(FIFO)

队列需在尾部添加(入队)、头部移除(出队)。数组的 push()shift() 可满足,但注意:shift() 时间复杂度为 O(n),因为要移动所有后续元素;若数据量大,可考虑用双端队列思路优化(见下一条)。

  • 入队:用 arr.push(item)
  • 出队:用 arr.shift()
  • 查看队首:访问 arr[0]
  • 判空:同样用 arr.length === 0

示例:

const queue = [];
queue.push('a'); // ['a']
queue.push('b'); // ['a', 'b']
console.log(queue.shift()); // 'a'
console.log(queue[0]); // 'b'

更高效的队列实现(避免 shift)

为规避 shift() 的性能问题,可用“双指针+数组”模拟:维护 head(指向队首索引)和 tail(指向下一个入队位置),所有操作均为 O(1)。数组不真正删除元素,仅移动指针;当空间不足时再清理或扩容。

  • 入队:arr[tail++] = item
  • 出队:先取 arr[head],再 head++
  • 队首:arr[head](需确保 head )
  • 长度: tail - head;为空时 head === tail

这种写法常见于底层实现或高频操作场景,日常小规模使用 push/shift 完全够用。

小结与提醒

数组实现栈和队列简洁实用,适合学习原理和中小型项目。栈推荐无脑用 push/pop;队列若对性能敏感、数据频繁增删,优先考虑指针方式或直接使用 collections/deque 类库(Node.js 环境),浏览器端也可封装一个轻量队列类。记住:逻辑比语法更重要——明确“谁进谁出、从哪进从哪出”,就踩不准坑。

基本上就这些。

到这里,我们也就讲完了《JS数组实现栈与队列方法详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于数据结构的知识点!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>