 Rust与算法 - 谢波Latex 完成 可参考点 为什么 为什么讲这个话题? 为什么要讲数据结构和算法两部分? 算法相关知识 算法相关知识 • 抽象数据类型 • 时空复杂度 • 复杂度计算 • 基本数据结构复杂度 抽象数据类型 什么是抽象数据类型? 为什么需要抽象数据类型? 时空复杂度 • 时间复杂度更被看重 • 时间和空间复杂度不是对立的,可以协同 时间和空间复杂度 复杂度计算 • 大O标记法(数量级近似)0 码力 | 28 页 | 3.52 MB | 1 年前3 Rust与算法 - 谢波Latex 完成 可参考点 为什么 为什么讲这个话题? 为什么要讲数据结构和算法两部分? 算法相关知识 算法相关知识 • 抽象数据类型 • 时空复杂度 • 复杂度计算 • 基本数据结构复杂度 抽象数据类型 什么是抽象数据类型? 为什么需要抽象数据类型? 时空复杂度 • 时间复杂度更被看重 • 时间和空间复杂度不是对立的,可以协同 时间和空间复杂度 复杂度计算 • 大O标记法(数量级近似)0 码力 | 28 页 | 3.52 MB | 1 年前3
 Rust 程序设计语言 简体中文版 1.85.0以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代码,并且与手写的代码运行速度同样快。Rust 努力确保代码又安全又快速。 这里提到的只是几个较大的受益群体,Rust 187/562Rust 程序设计语言 简体中文版 泛型、Trait 和生命周期 每一个编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型(generics): 具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如它们的行为或如何与其他泛 型相关联,而不需要在编写和编译代码时知道它们在这里实际上代表什么。 函数可以获取一些不同于 i32 或 String 这样具体类型的泛型参数,就像一个获取未知类型值 {largest}"); } 示例 10-2:寻找两个数组最大值的代码 虽然代码能够执行,但是重复的代码是冗余且容易出错的,更新逻辑时我们不得不记住需要修 改多处地方的代码。 为了消除重复,我们要创建一层抽象,定义一个处理任意整型列表作为参数的函数。这个方案 使得代码更简洁,并且表现了寻找任意列表中最大值这一概念。 在示例 10-3 的程序中将寻找最大值的代码提取到了一个叫做 largest 的函数中。接着我们调0 码力 | 562 页 | 3.23 MB | 26 天前3 Rust 程序设计语言 简体中文版 1.85.0以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代码,并且与手写的代码运行速度同样快。Rust 努力确保代码又安全又快速。 这里提到的只是几个较大的受益群体,Rust 187/562Rust 程序设计语言 简体中文版 泛型、Trait 和生命周期 每一个编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型(generics): 具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如它们的行为或如何与其他泛 型相关联,而不需要在编写和编译代码时知道它们在这里实际上代表什么。 函数可以获取一些不同于 i32 或 String 这样具体类型的泛型参数,就像一个获取未知类型值 {largest}"); } 示例 10-2:寻找两个数组最大值的代码 虽然代码能够执行,但是重复的代码是冗余且容易出错的,更新逻辑时我们不得不记住需要修 改多处地方的代码。 为了消除重复,我们要创建一层抽象,定义一个处理任意整型列表作为参数的函数。这个方案 使得代码更简洁,并且表现了寻找任意列表中最大值这一概念。 在示例 10-3 的程序中将寻找最大值的代码提取到了一个叫做 largest 的函数中。接着我们调0 码力 | 562 页 | 3.23 MB | 26 天前3
 Rust 程序设计语言简体中文版以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代码,并且与手写的代码运行速度同样快。Rust 努力确保代码又安全又快速。 这里提到的只是几个较大的受益群体,Rust 4aa96a3d20570f868bd20e8e3e865b047284be30 每一个编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型(generics)。 泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如它们的行为或如何与 其他泛型相关联,而不需要在编写和编译代码时知道它们在这里实际上代表什么。 函数可以获取一些不同于 i32 或 String 这样具体类型的泛型参数,就像一个获取未知类型 largest); } 示例 10-2:寻找 两个 数字列表最大值的代码 虽然代码能够执行,但是重复的代码是冗余且容易出错的,更新逻辑时我们不得不记住需要修 改多处地方的代码。 为了消除重复,我们要创建一层抽象,定义一个处理任意整型列表作为参数的函数。这个方案 使得代码更简洁,并且表现了寻找任意列表中最大值这一概念。 在示例 10-3 的程序中将寻找最大值的代码提取到了一个叫做 largest 的函数中。接着我们调0 码力 | 600 页 | 12.99 MB | 1 年前3 Rust 程序设计语言简体中文版以运行的多快,也是指编写 Rust 程序的速度。Rust 编译器的检查确保了增加功能和重构代码 时的稳定性,这与那些缺乏这些检查的语言中脆弱的祖传代码形成了鲜明对比,开发者往往不 敢去修改这些代码。通过追求零成本抽象(zero-cost abstractions)—— 将高级语言特性编 译成底层代码,并且与手写的代码运行速度同样快。Rust 努力确保代码又安全又快速。 这里提到的只是几个较大的受益群体,Rust 4aa96a3d20570f868bd20e8e3e865b047284be30 每一个编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是 泛型(generics)。 泛型是具体类型或其他属性的抽象替代。我们可以表达泛型的属性,比如它们的行为或如何与 其他泛型相关联,而不需要在编写和编译代码时知道它们在这里实际上代表什么。 函数可以获取一些不同于 i32 或 String 这样具体类型的泛型参数,就像一个获取未知类型 largest); } 示例 10-2:寻找 两个 数字列表最大值的代码 虽然代码能够执行,但是重复的代码是冗余且容易出错的,更新逻辑时我们不得不记住需要修 改多处地方的代码。 为了消除重复,我们要创建一层抽象,定义一个处理任意整型列表作为参数的函数。这个方案 使得代码更简洁,并且表现了寻找任意列表中最大值这一概念。 在示例 10-3 的程序中将寻找最大值的代码提取到了一个叫做 largest 的函数中。接着我们调0 码力 | 600 页 | 12.99 MB | 1 年前3
 洛佳 组件化驱动、ROM运行环境与RustSBI适配embedded-hal等外设功能标准抽象 面 向 功 能 的 外 设 结 构 联合所有权、泛型等,暴露外设所有功能 外 设 及 其 寄 存 器 表 示 封装寄存器、位域表示和数据结构 分享性外设:以GPIO为例 • 从前级环境获取所有权,如从ROM 运行环境的#[entry]获得; • 配置GPIO状态后,只有对应外设类 型允许的操作函数能通过编译,否则 拒绝编译,避免不安全行为; • 开源标准抽象的功能,使用抽象规定 开源标准抽象的功能,使用抽象规定 的调用方法。本芯片外设专属的功能 也可通过专有函数使用; • 用户代码简短易懂,容易编写和调 试,降低开发成本。 *BL808组件化驱动操作GPIO按钮和灯 组件化外设的分类和设计方法 通 用 连 接 外 设 U A R T 、 S P I 和 I 2 C 等 , 通 过 互 斥 I O 引 脚 划 分 资 源 , 抽 象 接 口 , 使 用 片 外 外 设0 码力 | 21 页 | 3.12 MB | 1 年前3 洛佳 组件化驱动、ROM运行环境与RustSBI适配embedded-hal等外设功能标准抽象 面 向 功 能 的 外 设 结 构 联合所有权、泛型等,暴露外设所有功能 外 设 及 其 寄 存 器 表 示 封装寄存器、位域表示和数据结构 分享性外设:以GPIO为例 • 从前级环境获取所有权,如从ROM 运行环境的#[entry]获得; • 配置GPIO状态后,只有对应外设类 型允许的操作函数能通过编译,否则 拒绝编译,避免不安全行为; • 开源标准抽象的功能,使用抽象规定 开源标准抽象的功能,使用抽象规定 的调用方法。本芯片外设专属的功能 也可通过专有函数使用; • 用户代码简短易懂,容易编写和调 试,降低开发成本。 *BL808组件化驱动操作GPIO按钮和灯 组件化外设的分类和设计方法 通 用 连 接 外 设 U A R T 、 S P I 和 I 2 C 等 , 通 过 互 斥 I O 引 脚 划 分 资 源 , 抽 象 接 口 , 使 用 片 外 外 设0 码力 | 21 页 | 3.12 MB | 1 年前3
 Comprehensive Rust(简体中文) 202412数组访问有边界检查。 – 整数溢出有明确定义(panic 或回绕)。 • 代 言功能:具有与高级语言一样丰富且人性化的表达能力 – 枚举和模式匹配。 – 泛型。 – 无额外开销的外部函数接口(FFI)。 – 零成本抽象。 – 强大的编译器错误提示。 – 内置依赖管理器。 – 对测试的内置支持。 – 优秀的语言服务协议(Language Server Protocol)支持。 不用在这里占用过多时间。所有这些要点均会在后面进行详细讲解。 special wrapper types allowed to be receiver types, such as Box Comprehensive Rust(简体中文) 202412数组访问有边界检查。 – 整数溢出有明确定义(panic 或回绕)。 • 代 言功能:具有与高级语言一样丰富且人性化的表达能力 – 枚举和模式匹配。 – 泛型。 – 无额外开销的外部函数接口(FFI)。 – 零成本抽象。 – 强大的编译器错误提示。 – 内置依赖管理器。 – 对测试的内置支持。 – 优秀的语言服务协议(Language Server Protocol)支持。 不用在这里占用过多时间。所有这些要点均会在后面进行详细讲解。 special wrapper types allowed to be receiver types, such as Box- . 13.2 特征(Trait) Rust 让您可以依据特征对类型进行抽象化处理。特征与接口类似: trait Pet { /// Return a sentence from this pet. 68 fn talk(&self) -> String; /// result as if you had hand-coded the data structures without the abstraction. 14.2 泛型类型 您可以使用泛型对具体字段类型进行抽象化处理: struct Point - { x: T, y: T, } impl - Point - { fn coords(&self) -> (&T, &T) { (&self 0 码力 | 359 页 | 1.33 MB | 10 月前3
 Comprehensive Rust(繁体中文)陣列存取行為會經過邊界檢查。 – 整數溢位的行為是明確的 (恐慌或迴繞)。 • 「現代化的語言特徵」- 具表現力且符合人因工程學的高階語言 – 列舉和模式配對。 – 泛型。 – 沒有 FFI 負擔。 – 零成本的抽象化機制。 – 更好的編譯錯誤描述。 – 內建依附元件管理工具。 – 內建測試支援。 – 卓越的語言伺服器通訊協定支援。 這裡不要花太多時間。這幾點稍後全都會深入介紹。 請務必詢問全班同學,瞭解他 self 的 變 體 以 外,您 還 可 以 使 用特 殊 的 包 裝 函 式 型 別做 為 接 收 器 型 別,例 如 Box Comprehensive Rust(繁体中文)陣列存取行為會經過邊界檢查。 – 整數溢位的行為是明確的 (恐慌或迴繞)。 • 「現代化的語言特徵」- 具表現力且符合人因工程學的高階語言 – 列舉和模式配對。 – 泛型。 – 沒有 FFI 負擔。 – 零成本的抽象化機制。 – 更好的編譯錯誤描述。 – 內建依附元件管理工具。 – 內建測試支援。 – 卓越的語言伺服器通訊協定支援。 這裡不要花太多時間。這幾點稍後全都會深入介紹。 請務必詢問全班同學,瞭解他 self 的 變 體 以 外,您 還 可 以 使 用特 殊 的 包 裝 函 式 型 別做 為 接 收 器 型 別,例 如 Box- 。 13.2 特徵 Rust 可讓您依據特徵對型別進行抽象化處理,這與介面相似: 68 trait Pet { /// Return a sentence from this pet. fn talk(&self) -> String; /// Print as if you had hand-coded the data structures without the abstraction. 14.2 泛型資料型別 你可以使用泛型將具體的欄位型別抽象化: struct Point - { x: T, y: T, } impl - Point - { fn coords(&self) -> (&T, &T) { (&self.x 0 码力 | 358 页 | 1.41 MB | 10 月前3
 Comprehensive Rust(繁体中文) 202406陣列存取行為會經過邊界檢查。 – 整數溢位的行為是明確的 (恐慌或迴繞)。 • 「現代化的語言特徵」- 具表現力且符合人因工程學的高階語言 – 列舉和模式配對。 – 泛型。 – 沒有 FFI 負擔。 – 零成本的抽象化機制。 – 更好的編譯錯誤描述。 – 內建依附元件管理工具。 – 內建測試支援。 – 卓越的語言伺服器通訊協定支援。 這裡不要花太多時間。這幾點稍後全都會深入介紹。 請務必詢問全班同學,瞭解他 self 的 變 體 以 外,您 還 可 以 使 用特 殊 的 包 裝 函 式 型 別做 為 接 收 器 型 別,例 如 Box Comprehensive Rust(繁体中文) 202406陣列存取行為會經過邊界檢查。 – 整數溢位的行為是明確的 (恐慌或迴繞)。 • 「現代化的語言特徵」- 具表現力且符合人因工程學的高階語言 – 列舉和模式配對。 – 泛型。 – 沒有 FFI 負擔。 – 零成本的抽象化機制。 – 更好的編譯錯誤描述。 – 內建依附元件管理工具。 – 內建測試支援。 – 卓越的語言伺服器通訊協定支援。 這裡不要花太多時間。這幾點稍後全都會深入介紹。 請務必詢問全班同學,瞭解他 self 的 變 體 以 外,您 還 可 以 使 用特 殊 的 包 裝 函 式 型 別做 為 接 收 器 型 別,例 如 Box- 。 13.2 特徵 Rust 可讓您依據特徵對型別進行抽象化處理,這與介面相似: 66 trait Pet { /// Return a sentence from this pet. fn talk(&self) -> String; /// Print as if you had hand-coded the data structures without the abstraction. 14.2 泛型資料型別 你可以使用泛型將具體的欄位型別抽象化: struct Point - { x: T, y: T, } impl - Point - { fn coords(&self) -> (&T, &T) { (&self.x 0 码力 | 356 页 | 1.41 MB | 1 年前3
 Hello 算法 1.1.0 Rust版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 fn 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 388 页 | 18.50 MB | 1 年前3 Hello 算法 1.1.0 Rust版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 fn 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 www.hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 387 页 | 18.51 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Rust 版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 www.hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 4.3 列表 列表(list)是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.0.0 Rust版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 fn 在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 「列表 list」是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 383 页 | 17.61 MB | 1 年前3 Hello 算法 1.0.0 Rust版们会在后续章节中详细介绍。 复杂度分析为我们提供了一把评估算法效率的“标尺”,使我们可以衡量执行某个算法所需的时间和空间资 源,对比不同算法之间的效率。 复杂度是个数学概念,对于初学者可能比较抽象,学习难度相对较高。从这个角度看,复杂度分析可能不太 适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习 作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 “时间增长趋势”这个概念比较抽象,我们通过一个例子来加以理解。假设输入数据大小为 ? ,给定三个算法 A、B 和 C : 第 2 章 复杂度分析 hello‑algo.com 29 // 算法 A 的时间复杂度:常数阶 fn 在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 「列表 list」是一个抽象的数据结构概念,它表示元素的有序集合,支持元素访问、修改、添加、删除和遍历 等操作,无须使用者考虑容量限制的问题。列表可以基于链表或数组实现。 ‧ 链表天然可以看作一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。0 码力 | 383 页 | 17.61 MB | 1 年前3
共 22 条
- 1
- 2
- 3













