JavaScript数据结构_链表树图算法实现

链表、树、图是JavaScript中核心数据结构。链表通过节点连接实现动态存储,支持尾插、指定位置插入与删除;树以二叉搜索树为例,实现节点插入、中序遍历与查找;图采用邻接表表示,支持添加顶点与边,并实现深度优先(DFS)和广度优先(BFS)遍历。三者分别适用于线性、层级与网状关系的数据处理,是算法设计与开发中的基础工具。

javascript数据结构_链表树图算法实现

链表、树、图是JavaScript中常见的数据结构,它们在算法实现和实际开发中应用广泛。下面分别介绍这三种数据结构的基本实现方式及常用操作。

链表(Linked List)

链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。

节点定义:

class ListNode {    constructor(val) {        this.val = val;        this.next = null;    }}

单向链表实现:

立即学习“Java免费学习笔记(深入)”;

class LinkedList {    constructor() {        this.head = null;        this.size = 0;    }
// 在尾部添加节点append(val) {    const node = new ListNode(val);    if (!this.head) {        this.head = node;    } else {        let current = this.head;        while (current.next) {            current = current.next;        }        current.next = node;    }    this.size++;}// 插入节点到指定位置insertAt(index, val) {    if (index  this.size) return false;    const node = new ListNode(val);    if (index === 0) {        node.next = this.head;        this.head = node;    } else {        let current = this.head;        for (let i = 0; i < index - 1; i++) {            current = current.next;        }        node.next = current.next;        current.next = node;    }    this.size++;    return true;}// 删除指定值的节点remove(val) {    if (!this.head) return null;    if (this.head.val === val) {        this.head = this.head.next;        this.size--;        return val;    }    let current = this.head;    while (current.next && current.next.val !== val) {        current = current.next;    }    if (current.next) {        current.next = current.next.next;        this.size--;        return val;    }    return null;}

}

树(Tree)— 二叉树与二叉搜索树

树是非线性结构,常用于表示层级关系。二叉树每个节点最多有两个子节点。

二叉树节点定义:

Matlab语言的特点 中文WORD版 Matlab语言的特点 中文WORD版

本文档主要讲述的是Matlab语言的特点;Matlab具有用法简单、灵活、程式结构性强、延展性好等优点,已经逐渐成为科技计算、视图交互系统和程序中的首选语言工具。特别是它在线性代数、数理统计、自动控制、数字信号处理、动态系统仿真等方面表现突出,已经成为科研工作人员和工程技术人员进行科学研究和生产实践的有利武器。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Matlab语言的特点 中文WORD版 8 查看详情 Matlab语言的特点 中文WORD版

class TreeNode {    constructor(val) {        this.val = val;        this.left = null;        this.right = null;    }}

二叉搜索树(BST)实现:

class BST {    constructor() {        this.root = null;    }
// 插入节点insert(val) {    const node = new TreeNode(val);    if (!this.root) {        this.root = node;    } else {        this._insertNode(this.root, node);    }}_insertNode(root, node) {    if (node.val < root.val) {        if (!root.left) {            root.left = node;        } else {            this._insertNode(root.left, node);        }    } else {        if (!root.right) {            root.right = node;        } else {            this._insertNode(root.right, node);        }    }}// 中序遍历(升序输出)inorder(node = this.root, result = []) {    if (node) {        this.inorder(node.left, result);        result.push(node.val);        this.inorder(node.right, result);    }    return result;}// 查找节点search(val, node = this.root) {    if (!node) return null;    if (val === node.val) return node;    if (val < node.val) {        return this.search(val, node.left);    } else {        return this.search(val, node.right);    }}

}

图(Graph)

图由节点(顶点)和边组成,可用于表示复杂关系网络。

图的邻接表实现:

class Graph {    constructor() {        this.adjacencyList = new Map();    }
// 添加顶点addVertex(v) {    if (!this.adjacencyList.has(v)) {        this.adjacencyList.set(v, []);    }}// 添加边(无向图)addEdge(v, w) {    this.addVertex(v);    this.addVertex(w);    this.adjacencyList.get(v).push(w);    this.adjacencyList.get(w).push(v);}// 深度优先遍历(DFS)dfs(start) {    const visited = new Set();    const result = [];    const traverse = (vertex) => {        if (!vertex) return;        result.push(vertex);        visited.add(vertex);        this.adjacencyList.get(vertex).forEach(neighbor => {            if (!visited.has(neighbor)) {                traverse(neighbor);            }        });    };    traverse(start);    return result;}// 广度优先遍历(BFS)bfs(start) {    const queue = [start];    const visited = new Set([start]);    const result = [];    while (queue.length) {        const vertex = queue.shift();        result.push(vertex);        this.adjacencyList.get(vertex).forEach(neighbor => {            if (!visited.has(neighbor)) {                visited.add(neighbor);                queue.push(neighbor);            }        });    }    return result;}

}

这些基础实现涵盖了链表、树、图的核心操作。理解其原理有助于解决如路径查找、排序、递归等常见算法问题。基本上就这些,不复杂但容易忽略细节。

以上就是JavaScript数据结构_链表树图算法实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/863594.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SQL语言如何进行分区表管理 SQL语言在大规模数据存储中的高效策略
上一篇 2025年11月28日 00:54:08
多闪怎么注册_多闪账号如何登录
下一篇 2025年11月28日 00:54:15

相关推荐

  • 喜马拉雅app为什么总是自动暂停 喜马拉雅app播放中断问题解决方案

    喜马拉雅app为什么总是自动暂停 喜马拉雅app播放中断问题解决方案喜马拉雅app为什么总是自动暂停 喜马拉雅app播放中断问题解决方案喜马拉雅app为什么总是自动暂停 喜马拉雅app播放中断问题解决方案喜马拉雅app为什么总是自动暂停 喜马拉雅app播放中断问题解决方案

    首先检查后台权限和电池优化设置,确保喜马拉雅可后台运行;再关闭静音时段功能,开启中断后自动播放选项,并连接稳定网络或使用离线下载,以解决播放中断问题。 如果您在使用喜马拉雅App收听音频时,遇到播放过程中无故自动暂停或中断的情况,这可能是由设备设置、网络环境或应用自身配置引起的。以下是针对此问题的多…

    2026年10月3日 • 用户投稿
    100
  • 苹果手机打字声音太大怎么关

    如何关闭键盘敲击音效 想要解决打字声音过大的问题,最有效的方式是关闭键盘的敲击音效。操作步骤如下: 进入手机主屏幕,打开“设置”应用。 向下滑动,选择“声音与触感”功能选项。 在该页面中找到“键盘点击声”这一项,点击右侧的开关将其关闭。 关闭后,输入文字时将不再播放按键音。 此方法操作简便,适用于绝…

    2026年10月3日
    000
  • 中信证券App如何使用条件单交易_中信证券App条件单交易设置

    中信证券App如何使用条件单交易_中信证券App条件单交易设置中信证券App如何使用条件单交易_中信证券App条件单交易设置中信证券App如何使用条件单交易_中信证券App条件单交易设置中信证券App如何使用条件单交易_中信证券App条件单交易设置

    答案:通过中信证券App可设置条件单实现自动交易。首先登录App,从“交易”菜单或搜索栏进入条件单页面;其次选择止损、止盈或网格交易等类型,输入股票代码、触发价格、委托价格、数量及有效期;最后确认信息并提交,成功后可在列表中查看和管理已设置的条件单状态。 如果您希望在股价达到预设目标时自动执行买卖操…

    2026年10月3日 • 用户投稿
    100
  • iPhone安装DeepSeek全步骤保姆级攻略

    iPhone安装DeepSeek全步骤保姆级攻略iPhone安装DeepSeek全步骤保姆级攻略iPhone安装DeepSeek全步骤保姆级攻略iPhone安装DeepSeek全步骤保姆级攻略

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ iPhone安装DeepSeek,其实并没有想象中那么复杂。关键在于找到正确的安装源,并理解一些iOS系统的限制。 解决方案 获取DeepSeek安装包(IPA文件): 这是第一步,也是最关键的…

    2026年10月3日 • 用户投稿
    000
  • 电脑病毒感染后数据如何恢复?先杀毒再用恢复工具提取文件

    电脑病毒感染后数据如何恢复?先杀毒再用恢复工具提取文件电脑病毒感染后数据如何恢复?先杀毒再用恢复工具提取文件电脑病毒感染后数据如何恢复?先杀毒再用恢复工具提取文件电脑病毒感染后数据如何恢复?先杀毒再用恢复工具提取文件

    首先断开网络并清除病毒,再通过显示隐藏文件、使用数据恢复软件或专业机构重建,逐步恢复被病毒感染丢失的数据。 如果您发现电脑运行异常,重要文件被加密或消失,很可能是受到了病毒的攻击。病毒会通过删除、隐藏或加密文件的方式破坏数据,导致无法正常访问。以下是先对系统进行安全清理,再尝试恢复丢失数据的操作步骤…

    2026年10月3日 • 用户投稿
    000
  • win10桌面文件路径在哪里_Win10桌面文件夹位置查找与修改

    win10桌面文件路径在哪里_Win10桌面文件夹位置查找与修改win10桌面文件路径在哪里_Win10桌面文件夹位置查找与修改win10桌面文件路径在哪里_Win10桌面文件夹位置查找与修改win10桌面文件路径在哪里_Win10桌面文件夹位置查找与修改

    1、通过文件资源管理器右键“桌面”属性可查看当前路径,通常为C:Users用户名Desktop;2、使用命令提示符输入echo %USERPROFILE%Desktop可快速获取路径;3、在“桌面属性-位置”选项卡中点击“移动”,选择新目标文件夹如D:MyDesktop,并确认迁移原内容,即可更改默…

    2026年10月3日 • 用户投稿
    100
  • Gradle教程:将兄弟项目的编译JAR文件复制到指定目录

    Gradle教程:将兄弟项目的编译JAR文件复制到指定目录Gradle教程:将兄弟项目的编译JAR文件复制到指定目录Gradle教程:将兄弟项目的编译JAR文件复制到指定目录Gradle教程:将兄弟项目的编译JAR文件复制到指定目录

    本教程旨在指导Gradle初学者如何配置构建任务,实现将兄弟项目(项目B)编译生成的JAR文件复制到另一个项目(项目A)的指定目录下。通过自定义Gradle任务,可以确保项目B在项目A构建之前完成编译,并将JAR文件复制到正确的位置,从而满足特定的运行时需求。 使用Gradle自定义任务复制JAR文…

    2026年10月3日 • 用户投稿
    000
  • eMachines笔记本蓝屏磁盘错误如何处理?专家级方法指导你解决。

    eMachines笔记本蓝屏磁盘错误如何处理?专家级方法指导你解决。eMachines笔记本蓝屏磁盘错误如何处理?专家级方法指导你解决。eMachines笔记本蓝屏磁盘错误如何处理?专家级方法指导你解决。eMachines笔记本蓝屏磁盘错误如何处理?专家级方法指导你解决。

    蓝屏提示磁盘错误时,应先运行chkdsk修复文件系统,再通过安全模式排除软硬件冲突,接着检查硬盘物理连接与健康状态,必要时使用Hiren’s Boot CD检测SMART信息;若引导记录损坏,则用Windows安装U盘执行bootrec命令修复;若硬盘有物理损伤,需停止写入操作,并借助D…

    2026年10月3日 • 用户投稿
    100
  • 怎么让豆包AI生成Python网络爬虫框架

    怎么让豆包AI生成Python网络爬虫框架怎么让豆包AI生成Python网络爬虫框架怎么让豆包AI生成Python网络爬虫框架怎么让豆包AI生成Python网络爬虫框架

    使用豆包ai生成python爬虫框架的步骤如下:1. 明确需求,包括目标网站、数据类型和是否需处理动态内容;2. 向豆包ai描述具体任务,如抓取豆瓣电影top250的标题与评分,并指定使用requests和beautifulsoup;3. 获取基础代码模板后,添加异常处理、代理设置、日志记录及数据存…

    2026年10月3日 • 用户投稿
    000
  • Mac上安装composer的详细步骤

    Mac上安装composer的详细步骤Mac上安装composer的详细步骤Mac上安装composer的详细步骤Mac上安装composer的详细步骤

    答案:在Mac上安装Composer需先确认PHP已安装,使用curl下载安装脚本并生成composer.phar,将其移至/usr/local/bin目录以全局调用,最后通过composer命令验证安装成功,并可选配置自动补全功能。 在Mac上安装Composer非常简单,可以通过命令行工具快速完…

    2026年10月3日 • 用户投稿
    100
  • 小强阅读app怎么划线做笔记_小强阅读app阅读时如何划线笔记详细方法

    小强阅读app怎么划线做笔记_小强阅读app阅读时如何划线笔记详细方法小强阅读app怎么划线做笔记_小强阅读app阅读时如何划线笔记详细方法小强阅读app怎么划线做笔记_小强阅读app阅读时如何划线笔记详细方法小强阅读app怎么划线做笔记_小强阅读app阅读时如何划线笔记详细方法

    打开小强阅读App并进入书籍阅读界面;2. 长按文字选择范围即可划线高亮;3. 点击“加笔记”输入批注并保存;4. 通过笔记图标查看、编辑或删除笔记,支持排序查找,操作简便利于知识积累。 在小强阅读App中划线做笔记非常简单,适合喜欢在阅读过程中标记重点内容的用户。以下是具体操作步骤,帮助你快速掌握…

    2026年10月3日 • 用户投稿
    000
  • 悟空浏览器收藏夹栏怎么一直显示_悟空浏览器永久显示收藏夹栏设置

    悟空浏览器收藏夹栏怎么一直显示_悟空浏览器永久显示收藏夹栏设置悟空浏览器收藏夹栏怎么一直显示_悟空浏览器永久显示收藏夹栏设置悟空浏览器收藏夹栏怎么一直显示_悟空浏览器永久显示收藏夹栏设置悟空浏览器收藏夹栏怎么一直显示_悟空浏览器永久显示收藏夹栏设置

    1、通过设置开启收藏夹栏:打开悟空浏览器,点击更多菜单进入设置,找到“浏览器视图”并开启“显示收藏夹栏”。2、检查账户同步状态:登录账号并确保“收藏夹”同步功能已启用,手动同步数据后刷新界面。3、重置界面布局:在高级设置中选择“恢复默认设置”,重启浏览器以修复异常隐藏问题。4、更新应用版本:前往应用…

    2026年10月3日 • 用户投稿
    100
  • composer.json中的autoload-dev是做什么用的_解析composer.json中autoload-dev字段的用途

    composer.json中的autoload-dev是做什么用的_解析composer.json中autoload-dev字段的用途composer.json中的autoload-dev是做什么用的_解析composer.json中autoload-dev字段的用途composer.json中的autoload-dev是做什么用的_解析composer.json中autoload-dev字段的用途composer.json中的autoload-dev是做什么用的_解析composer.json中autoload-dev字段的用途

    autoload-dev用于定义开发环境的自动加载规则,如测试代码tests/目录,仅在开发时生效,不包含在生产环境中,提升性能与安全性。 autoload-dev 是 composer.json 中的一个配置字段,用于定义仅在开发环境下使用的自动加载规则。它和 autoload 的作用类似,都是告…

    2026年10月3日 • 用户投稿
    000
  • 苹果MacBookCPU运行缓慢?优化性能的实用建议

    苹果MacBookCPU运行缓慢?优化性能的实用建议苹果MacBookCPU运行缓慢?优化性能的实用建议苹果MacBookCPU运行缓慢?优化性能的实用建议苹果MacBookCPU运行缓慢?优化性能的实用建议

    首先检查活动监视器中高CPU占用的应用并强制退出,清理启动磁盘确保10GB以上可用空间,使用Dr.Cleaner等工具定期清理系统垃圾,最后禁用不必要的登录项和视觉效果以降低CPU负担。 如果您发现 MacBook 的 CPU 运行缓慢,导致整体性能下降、程序响应迟钝或风扇持续高速运转,则可能是由于…

    2026年10月3日 • 用户投稿
    000
  • Mac如何关闭“智能”引号_Mac文本编辑智能标点关闭方法

    Mac如何关闭“智能”引号_Mac文本编辑智能标点关闭方法Mac如何关闭“智能”引号_Mac文本编辑智能标点关闭方法Mac如何关闭“智能”引号_Mac文本编辑智能标点关闭方法Mac如何关闭“智能”引号_Mac文本编辑智能标点关闭方法

    关闭Mac自动转换引号功能的方法是:通过系统设置取消“使用智能引号”选项,可在键盘→文本输入→高级中操作;或在特定应用如TextEdit、Xcode中单独关闭;也可用Shift+Option+输入直双引号,Option+输入直单引号。 如果您在使用Mac进行文本输入时发现引号自动变为弯引号,这可能是…

    2026年10月3日 • 用户投稿
    100
  • 233乐园怎么加入游戏社区讨论_233乐园游戏社区参与方法

    233乐园怎么加入游戏社区讨论_233乐园游戏社区参与方法233乐园怎么加入游戏社区讨论_233乐园游戏社区参与方法233乐园怎么加入游戏社区讨论_233乐园游戏社区参与方法233乐园怎么加入游戏社区讨论_233乐园游戏社区参与方法

    您可通过233乐园APP进入游戏社区参与讨论:一、搜索游戏并进入其专属社区发帖或回复;二、点击底部“社区”标签浏览综合内容并互动;三、发帖时添加如#原神攻略#等关键词标签以提升曝光,确保内容相关。 如果您想与其他玩家交流游戏心得,获取最新攻略或分享游戏乐趣,但不清楚如何参与233乐园的游戏社区讨论,…

    2026年10月3日 • 用户投稿
    000
  • 如何安全访问漫蛙manwa?官网与网页版正确入口

    如何安全访问漫蛙manwa?官网与网页版正确入口如何安全访问漫蛙manwa?官网与网页版正确入口如何安全访问漫蛙manwa?官网与网页版正确入口如何安全访问漫蛙manwa?官网与网页版正确入口

    答案是访问漫蛙manwa需通过可靠入口并注意安全。近期可用主入口为https://manwa.cc,备用网址包括https://manwa.vip、https://manwa.site等,若无法访问可尝试切换;使用时建议通过正规渠道获取链接,优先选择网页版搜索或分类浏览,登录账号收藏漫画,并警惕仿冒…

    2026年10月3日 • 用户投稿
    500
  • 硬盘突然无法识别怎么办?教你三步恢复重要数据!

    硬盘突然无法识别怎么办?教你三步恢复重要数据!硬盘突然无法识别怎么办?教你三步恢复重要数据!硬盘突然无法识别怎么办?教你三步恢复重要数据!硬盘突然无法识别怎么办?教你三步恢复重要数据!

    硬盘无法识别时,先检查物理连接、更换数据线和接口,确认供电正常;再通过设备管理器或磁盘工具判断是否被系统识别;若硬件无误但无法访问,尝试更新驱动或使用专业软件恢复数据;若硬盘有异响或完全不响应,应停止通电并送修专业机构。常见原因包括连接问题、供电不足、文件系统损坏或物理故障。恢复前切勿写入新数据、避…

    2026年10月3日 • 用户投稿
    200
  • 夸克浏览器如何使用网页提取工具_夸克浏览器内容提取的实用技巧

    夸克浏览器如何使用网页提取工具_夸克浏览器内容提取的实用技巧夸克浏览器如何使用网页提取工具_夸克浏览器内容提取的实用技巧夸克浏览器如何使用网页提取工具_夸克浏览器内容提取的实用技巧夸克浏览器如何使用网页提取工具_夸克浏览器内容提取的实用技巧

    夸克浏览器可通过文章模式提取网页正文,去除广告干扰。1、进入网页后开启“文章模式”实现简洁阅读;2、对复杂页面长按调整选区,确保内容完整;3、提取后可保存为txt或PDF至指定路径;4、结合关键词搜索定位段落,提升提取精准度。 如果您在浏览网页时需要快速获取核心信息,但页面充斥着广告或冗余内容,可以…

    2026年10月3日 • 用户投稿
    000
  • 荣耀官宣新机Magic V5厚度:仅8.8mm

    荣耀官宣新机Magic V5厚度:仅8.8mm荣耀官宣新机Magic V5厚度:仅8.8mm荣耀官宣新机Magic V5厚度:仅8.8mm荣耀官宣新机Magic V5厚度:仅8.8mm

    6月23日,荣耀手机官方微博公布了旗下新机magic v5的机身厚度:8.8mm。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 该机型将在7月2日19点举行的荣耀Magic V5暨AI生态终端发布会上正式亮相。 此前已有消息透露,这款手机…

    2026年10月3日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信