JavaScript中无内置栈和队列,可用数组模拟:栈用push/pop实现LIFO,队列用push/shift实现FIFO;高性能场景可用环形缓冲区优化,封装成类提升复用性。

JavaScript 中没有内置的栈(Stack)和队列(Queue)类型,但可以用数组(Array)或对象(Object)轻松模拟它们的行为。核心在于遵循对应的数据结构规则:栈是“后进先出”(LIFO),队列是“先进先出”(FIFO)。
数组的 push() 和 pop() 方法天然支持 LIFO 操作,是最常用、最简洁的栈实现方式。
arr.push(item) 在末尾添加元素arr.pop() 移除并返回末尾元素arr[arr.length - 1],不修改栈arr.length === 0
示例:
本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。
485
const stack = [];<br>stack.push(1); // [1]<br>stack.push(2); // [1, 2]<br>console.log(stack.pop()); // 2<br>console.log(stack[stack.length - 1]); // 1
数组也能模拟队列,但需注意性能:用 push() 入队没问题,但用 shift() 出队会在每次调用时移动所有后续元素,时间复杂度为 O(n)。适合小规模数据;大规模建议用链表或双端队列思路优化。
立即学习“Java免费学习笔记(深入)”;
arr.push(item)
arr.shift()(移除并返回首项)arr[0]
arr.length === 0
示例:
const queue = [];<br>queue.push('a'); // ['a']<br>queue.push('b'); // ['a', 'b']<br>console.log(queue.shift()); // 'a'<br>console.log(queue[0]); // 'b'为避免 shift() 的性能问题,可手动维护头尾索引,复用数组空间。适用于对性能敏感或高频操作场景。
head(指向下一个要出队的位置)、tail(指向下一个要入队的位置)arr[tail],然后 tail++;出队时读取 arr[head],然后 head++
head === tail 时为空;当 (tail + 1) % capacity === head 时为满(需预留一个空位判断)这种实现接近原生队列的 O(1) 均摊复杂度,但代码略长,日常开发中若非高频使用,数组 + push/shift 已足够清晰实用。
把逻辑封装成类,便于复用、测试和扩展。例如:
class Stack {<br> constructor() { this.items = []; }<br> push(item) { this.items.push(item); }<br> pop() { return this.items.pop(); }<br> peek() { return this.items[this.items.length - 1]; }<br> isEmpty() { return this.items.length === 0; }<br>}<br><br>class Queue {<br> constructor() { this.items = []; }<br> enqueue(item) { this.items.push(item); }<br> dequeue() { return this.items.shift(); }<br> front() { return this.items[0]; }<br> isEmpty() { return this.items.length === 0; }<br>}这样在多个地方使用时语义清晰,也方便后期替换底层实现(比如换成链表)而不影响调用方。
以上就是javascript中的数据结构是什么_如何实现栈和队列?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号