本文档提供了 Hello Algo 仓库中 JavaScript 和 TypeScript 数据结构及算法实现的技术概述。内容涵盖了实现模式、语言特定功能以及 JavaScript 和 TypeScript 版本相同算法之间的关键差异。
Hello Algo 仓库使用多种编程语言实现了算法和数据结构,旨在提供全面的教育资源。JavaScript 和 TypeScript 实现遵循一致的模式,同时利用了每种语言的独特功能。
来源: codes/javascript/chapter_computational_complexity/time_complexity.js codes/typescript/chapter_computational_complexity/time_complexity.ts
每个实现通常包含
来源: codes/javascript/chapter_stack_and_queue/array_stack.js codes/typescript/chapter_stack_and_queue/array_stack.ts codes/javascript/chapter_stack_and_queue/array_queue.js codes/typescript/chapter_stack_and_queue/array_queue.ts
JavaScript 和 TypeScript 实现保持了相同的算法和数据结构,但 TypeScript 添加了类型注解,以获得更好的开发者体验和静态类型检查。
TypeScript 的主要新增功能
来源: codes/javascript/chapter_stack_and_queue/array_queue.js8-70 codes/typescript/chapter_stack_and_queue/array_queue.ts8-71
| 功能 | JavaScript | TypeScript |
|---|---|---|
| 属性定义 | 使用带有 # 前缀的私有字段 | 使用 private 修饰符 |
| 类型安全 | 仅运行时检查 | 编译时类型检查 |
| 方法签名 | 无返回类型 | 显式的返回类型(void、number 等) |
| 泛型集合 | 隐式 any 类型 | 显式类型参数 |
| Null 检查 | 手动检查 | 编译器辅助的 ! 操作符 |
来源: codes/javascript/chapter_stack_and_queue/queue.js9-35 codes/typescript/chapter_stack_and_queue/queue.ts9-37
JavaScript 实现使用原生语言特性,同时提供教育上的清晰度。这些实现通常遵循以下模式:
在现代 JavaScript 实现中,私有字段用 # 前缀表示。
许多数据结构利用 JavaScript 数组作为其基础
来源: codes/javascript/chapter_stack_and_queue/stack.js8-35 codes/javascript/chapter_stack_and_queue/queue.js8-35 codes/javascript/chapter_stack_and_queue/array_stack.js8-45
出于教育目的,该仓库包含了使用 JavaScript 的原生集合会效率低下的数据结构的有效实现。
来源: codes/javascript/chapter_stack_and_queue/array_queue.js8-69 codes/javascript/chapter_stack_and_queue/linkedlist_queue.js10-71
TypeScript 实现通过静态类型扩展了 JavaScript,同时保持了相同的算法结构。
TypeScript 提供了处理潜在 null 值的工具
来源: codes/typescript/chapter_stack_and_queue/array_queue.ts8-71 codes/typescript/chapter_stack_and_queue/linkedlist_queue.ts10-72
JavaScript 和 TypeScript 实现都包含了演示各种时间复杂度的示例。这两者在语言实现上几乎相同,TypeScript 仅添加了类型注解。
每个实现都包含演示特定时间复杂度的函数,并尽可能采用了迭代和递归方法。
来源: codes/javascript/chapter_computational_complexity/time_complexity.js8-119 codes/typescript/chapter_computational_complexity/time_complexity.ts8-119
仓库包含多种栈实现
原生数组栈:
自定义数组栈:
来源: codes/javascript/chapter_stack_and_queue/stack.js8-35 codes/javascript/chapter_stack_and_queue/array_stack.js8-45 codes/typescript/chapter_stack_and_queue/array_stack.ts8-45
队列实现包括
原生数组队列:
基于数组的循环队列:
链表队列:
来源: codes/javascript/chapter_stack_and_queue/queue.js8-35 codes/javascript/chapter_stack_and_queue/array_queue.js8-69 codes/javascript/chapter_stack_and_queue/linkedlist_queue.js10-71 codes/typescript/chapter_stack_and_queue/queue.ts8-37 codes/typescript/chapter_stack_and_queue/array_queue.ts8-71 codes/typescript/chapter_stack_and_queue/linkedlist_queue.ts10-72
JavaScript 和 TypeScript 的实现都遵循一致的模式来演示数据结构的使用
每个实现都遵循相似的文件组织模式
来源: codes/javascript/chapter_stack_and_queue/array_stack.js codes/typescript/chapter_stack_and_queue/array_stack.ts
Hello Algo 中的 JavaScript 和 TypeScript 实现提供了常见数据结构和算法的教学示例。它们遵循以下关键原则:
其他语言的实现,请参阅 Python 实现、C 和 C++ 实现 以及 Rust 实现。