本页面介绍了 Hello Algo 仓库中 Go、Swift、Zig、Dart 和 C# 的数据结构和算法实现。这些语言是对 Python 实现、C 和 C++ 实现、Rust 实现 和 JavaScript 和 TypeScript 实现 中涵盖的主要实现进行补充。
Hello Algo 仓库跨多种编程语言保持一致的实现,以展示与语言无关的算法概念。每种语言的实现都遵循通用的目录结构,但利用了特定语言的特性、构建系统和约定。
来源: codes/swift/Package.swift5-206 codes/zig/build.zig5-221 .github/workflows/swift.yml1-26 .github/workflows/dotnet.yml1-40 .github/workflows/dart.yml1-37 codes/zig/include/include.zig1-9
所有语言实现都遵循一致的模式,保持文件和目录结构以反映内容的概念组织。每种语言的实现都具有
来源: codes/swift/Package.swift5-206 codes/zig/build.zig10-221 codes/swift/include/include.zig1-9
Swift 实现使用 Swift 包管理器进行构建配置和依赖管理。该实现利用了 Swift 强类型系统和可选类型,为算法和数据结构提供了清晰、安全的代码。
Swift 代码被组织成一个 Swift 包,其中包含多个可执行目标,每个目标对应一个算法或数据结构示例。构建配置定义在 Package.swift 文件中。
| 组件类型 | 数量 | 描述 |
|---|---|---|
| 可执行文件 | 100+ | 单独的可运行示例 |
| 实用工具 | 3+ | 用于打印和数据结构的辅助模块 |
| 依赖项 | 1 | Swift Collections 包用于堆实现 |
来源: codes/swift/Package.swift5-206 .github/workflows/swift.yml1-26
Swift 实现包含用于常见数据结构的自定义实用类
ListNode - 链表节点实现TreeNode - 带有序列化/反序列化功能的二叉树节点PrintUtil - 用于数据结构打印的辅助工具该实现还使用了 Swift 的标准库和 Swift Collections 包来处理某些数据结构,例如堆。
来源: codes/swift/utils/PrintUtil.swift1-93 codes/swift/utils/ListNode.swift1-34 codes/swift/utils/TreeNode.swift1-72 codes/swift/chapter_heap/heap.swift1-80 codes/swift/chapter_heap/top_k.swift1-37
Swift 对二分查找的实现展示了该语言清晰的语法和类型安全性。
Array 类型和内置数组方法来源: codes/swift/chapter_divide_and_conquer/binary_search_recur.swift1-45 codes/swift/chapter_searching/binary_search_insertion.swift1-72 codes/swift/chapter_searching/binary_search_edge.swift1-52
Zig 提供了一种使用系统编程语言进行的实现,具有手动内存管理。Zig 实现使用 Zig 构建系统,并展示了在没有垃圾回收器的情况下实现内存安全。
Zig 代码使用单个 build.zig 文件将所有示例配置为独立的可执行目标。它遵循内存分配和去分配的一致模式。
来源: codes/zig/build.zig5-221 codes/zig/include/include.zig1-9
Zig 实现显式处理内存分配和去分配,展示了系统编程的原则。
ArenaAllocator 进行便捷的内存管理deinit() 进行资源清理try 关键字进行清晰的错误处理来源: codes/zig/chapter_heap/heap.zig9-80 codes/zig/chapter_heap/my_heap.zig9-186 codes/zig/chapter_searching/linear_search.zig9-54
Zig 实现包含了常见数据结构的实用模块
ListNode - 带实用功能的链表节点实现TreeNode - 带实用功能的二叉树节点实现PrintUtil - 用于可视化数据结构的函数这些实用工具使得跨示例的数据结构的渲染和操作保持一致
来源: codes/zig/include/PrintUtil.zig1-132 codes/zig/include/ListNode.zig1-49 codes/zig/include/TreeNode.zig1-63
Go 实现利用 Go 标准库和构建系统,注重简洁性和可读性。
Go 代码遵循 Go 标准包结构进行组织,采用一致的布局,并利用 Go 的测试框架进行验证。
来源: .github/workflows/go.yml1-37 codes/go/chapter_computational_complexity/space_complexity.go1-106 codes/go/chapter_computational_complexity/space_complexity_test.go1-26
来源: codes/go/chapter_computational_complexity/space_complexity.go1-106 codes/go/chapter_computational_complexity/space_complexity_test.go1-26
Dart 实现利用 Dart 的现代语言特性和面向对象方法,展示算法概念。
Dart 实现使用自定义构建脚本(build.dart)来编译和测试所有示例。
来源: .github/workflows/dart.yml1-37 codes/dart/build.dart1-40
C# 实现利用 .NET 特性,提供清晰、类型安全的算法和数据结构实现。
C# 代码组织为 .NET 项目,CS 文件按章节组织,使用标准的 .NET 约定。
来源: .github/workflows/dotnet.yml1-40 codes/csharp/csharp.sln1-26
下表显示了某些算法概念在不同语言中的实现方式
| 概念 | Swift | Zig | Go | Dart | C# |
|---|---|---|---|---|---|
| 内存管理 | ARC | 手动 | GC | GC | GC |
| 容器类型 | Array, Dictionary | ArrayList, AutoHashMap | Slice, Map | List, Map | List, Dictionary |
| 二叉树 | 面向类 | Struct + Functions | Struct + Methods | 面向类 | 面向类 |
| 堆实现 | 使用 Swift Collections | 自定义实现 | 标准库 | 自定义实现 | 标准库 |
| 错误处理 | Optionals | Error unions | Error returns | 异常处理 | 异常处理 |
来源: codes/swift/chapter_tree/avl_tree.swift1-231 codes/zig/chapter_heap/my_heap.zig9-186 codes/swift/chapter_heap/my_heap.swift1-164 codes/zig/chapter_computational_complexity/worst_best_time_complexity.zig1-46 codes/swift/chapter_computational_complexity/worst_best_time_complexity.swift1-41 codes/zig/chapter_computational_complexity/space_complexity.zig1-124 codes/swift/chapter_computational_complexity/space_complexity.swift1-99
有关设置这些语言的开发环境的信息,请参阅文档附录部分的安装指南。
来源: docs/chapter_appendix/installation.md1-69 zh-hant/docs/chapter_appendix/installation.md1-69