0

0

javascript数据结构是什么_如何实现栈和队列

夜晨

夜晨

发布时间:2025-12-21 17:22:02

|

941人浏览过

|

来源于php中文网

原创

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

javascript数据结构是什么_如何实现栈和队列

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免费学习笔记(深入)”;

Rose.ai
Rose.ai

一个云数据平台,帮助用户发现、可视化数据

下载
  • 基础实现可用 push() 入队、shift() 出队,适合小规模或教学场景
  • 高性能实现:维护 headtail 索引,用数组存储,不实际删除元素,仅移动索引;当空间不足时可扩容或清理已出队部分
  • 必须提供 enqueue(item)(入队)、dequeue()(出队)、front()(看队首)、isEmpty()size()

简易版示例:

class Queue {
  constructor() {
    this.items = [];
  }
  enqueue(item) {
    this.items.push(item);
  }
  dequeue() {
    return this.items.shift();
  }
  front() {
    return this.items[0];
  }
  isEmpty() {
    return this.items.length === 0;
  }
  size() {
    return this.items.length;
  }
}

用对象+指针实现更高效的队列(无数组移动)

避免 shift() 的性能损耗,可改用对象键值对 + 计数器,或用链表结构。但最简洁实用的方式是“索引偏移法”——用数组配合起始索引管理逻辑队首位置。

  • 初始化时设 head = 0items = []
  • enqueue 仍用 pushdequeue 不删元素,只返回 items[head] 并递增 head
  • head 超过一定比例(如一半),可截取剩余部分重置 itemshead,保持内存合理
  • 此时 size() 应为 items.length - head

栈和队列的实际用途提示

理解它们不只是为了手写代码,更是为了识别问题模式:

  • 函数调用堆栈、浏览器历史记录、括号匹配、深度优先搜索(DFS)天然契合栈
  • 任务调度、广度优先搜索(BFS)、打印任务排队、消息中间件消费顺序依赖队列
  • 现代 JS 中,Promise.then() 链、事件循环中的 microtask 队列,底层都体现队列思想
  • 不必强求“完全手写”,关键是在需要控制存取顺序时,能想到该用哪种结构,并知道如何用 JS 表达

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

183

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

226

2025.12.18

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号