data-structure-typed 2.2.7 → 2.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +14 -3
  3. package/README_CN.md +119 -275
  4. package/benchmark/report.html +1 -1
  5. package/benchmark/report.json +20 -324
  6. package/dist/cjs/index.cjs +106 -107
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs-legacy/index.cjs +106 -107
  9. package/dist/cjs-legacy/index.cjs.map +1 -1
  10. package/dist/esm/index.mjs +106 -107
  11. package/dist/esm/index.mjs.map +1 -1
  12. package/dist/esm-legacy/index.mjs +106 -107
  13. package/dist/esm-legacy/index.mjs.map +1 -1
  14. package/dist/leetcode/avl-tree-counter.mjs +2957 -0
  15. package/dist/leetcode/avl-tree-multi-map.mjs +2889 -0
  16. package/dist/leetcode/avl-tree.mjs +2720 -0
  17. package/dist/leetcode/binary-tree.mjs +1594 -0
  18. package/dist/leetcode/bst.mjs +2398 -0
  19. package/dist/leetcode/deque.mjs +683 -0
  20. package/dist/leetcode/directed-graph.mjs +1733 -0
  21. package/dist/leetcode/doubly-linked-list.mjs +709 -0
  22. package/dist/leetcode/hash-map.mjs +493 -0
  23. package/dist/leetcode/heap.mjs +542 -0
  24. package/dist/leetcode/max-heap.mjs +375 -0
  25. package/dist/leetcode/max-priority-queue.mjs +383 -0
  26. package/dist/leetcode/min-heap.mjs +363 -0
  27. package/dist/leetcode/min-priority-queue.mjs +371 -0
  28. package/dist/leetcode/priority-queue.mjs +363 -0
  29. package/dist/leetcode/queue.mjs +943 -0
  30. package/dist/leetcode/red-black-tree.mjs +2765 -0
  31. package/dist/leetcode/singly-linked-list.mjs +754 -0
  32. package/dist/leetcode/stack.mjs +217 -0
  33. package/dist/leetcode/tree-counter.mjs +3039 -0
  34. package/dist/leetcode/tree-multi-map.mjs +2913 -0
  35. package/dist/leetcode/trie.mjs +413 -0
  36. package/dist/leetcode/undirected-graph.mjs +1650 -0
  37. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
  38. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
  39. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +10 -10
  40. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +22 -23
  41. package/dist/types/data-structures/binary-tree/bst.d.ts +11 -11
  42. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
  43. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  44. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
  45. package/dist/umd/data-structure-typed.js +102 -103
  46. package/dist/umd/data-structure-typed.js.map +1 -1
  47. package/dist/umd/data-structure-typed.min.js +2 -2
  48. package/dist/umd/data-structure-typed.min.js.map +1 -1
  49. package/package.json +48 -171
  50. package/src/data-structures/binary-tree/avl-tree-counter.ts +6 -6
  51. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +13 -13
  52. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  53. package/src/data-structures/binary-tree/binary-tree.ts +53 -55
  54. package/src/data-structures/binary-tree/bst.ts +21 -22
  55. package/src/data-structures/binary-tree/red-black-tree.ts +3 -3
  56. package/src/data-structures/binary-tree/tree-counter.ts +4 -4
  57. package/src/data-structures/binary-tree/tree-multi-map.ts +13 -13
  58. package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +1 -2
  59. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +30 -30
  60. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +46 -46
  61. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +43 -43
  62. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +151 -151
  63. package/test/unit/data-structures/binary-tree/bst.test.ts +99 -99
  64. package/test/unit/data-structures/binary-tree/overall.test.ts +20 -20
  65. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +141 -141
  66. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +37 -37
  67. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +145 -145
  68. package/tsup.config.js +50 -21
  69. package/tsup.umd.config.js +29 -0
  70. package/tsup.node.config.js +0 -83
package/CHANGELOG.md CHANGED
@@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file.
8
8
  - [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
9
9
  - [`auto-changelog`](https://github.com/CookPete/auto-changelog)
10
10
 
11
- ## [v2.2.7](https://github.com/zrwusa/data-structure-typed/compare/v2.2.3...main) (upcoming)
11
+ ## [v2.2.8](https://github.com/zrwusa/data-structure-typed/compare/v2.2.3...main) (upcoming)
12
12
 
13
13
  ## [v2.2.3](https://github.com/zrwusa/data-structure-typed/compare/v2.2.2...v2.2.3) (6 January 2026)
14
14
 
package/README.md CHANGED
@@ -1,8 +1,19 @@
1
- # README: data-structure-typed Library
1
+ # data-structure-typed
2
+
3
+ English | [简体中文](./README_CN.md)
2
4
 
3
5
  A comprehensive TypeScript data structures library with production-ready implementations.
4
6
 
5
- **📚 [Installation](#-installation) • [Quick Start](#-quick-start-30-seconds) • [Full Docs](./docs/CONCEPTS.md) • [API Reference](./docs/REFERENCE.md) • [Playground](#playground) • [Examples](./docs/GUIDES.md)**
7
+ ![npm](https://img.shields.io/npm/dm/data-structure-typed)
8
+ ![GitHub contributors](https://img.shields.io/github/contributors/zrwusa/data-structure-typed)
9
+ ![npm package minimized gzipped size (select exports)](https://img.shields.io/bundlejs/size/data-structure-typed)
10
+ ![GitHub top language](https://img.shields.io/github/languages/top/zrwusa/data-structure-typed)
11
+ ![GITHUB Star](https://img.shields.io/github/stars/zrwusa/data-structure-typed)
12
+ ![eslint](https://aleen42.github.io/badges/src/eslint.svg)
13
+ ![NPM](https://img.shields.io/npm/l/data-structure-typed)
14
+ ![npm](https://img.shields.io/npm/v/data-structure-typed)
15
+
16
+ **📚 [Installation](#-installation) • [Quick Start](#-quick-start-30-seconds) • [Full Docs](#-documentation) • [API Reference](./docs/REFERENCE.md) • [Playground](#playground) • [Examples](./docs/GUIDES.md)**
6
17
 
7
18
  ---
8
19
 
@@ -541,8 +552,8 @@ MIT
541
552
  ## 📚 Full Documentation Structure
542
553
 
543
554
  ```
555
+ README.md (this file)
544
556
  docs/
545
- ├── README.md (this file)
546
557
  ├── CONCEPTS.md (theory & fundamentals)
547
558
  ├── REFERENCE.md (API documentation)
548
559
  ├── ARCHITECTURE.md (design principles)
package/README_CN.md CHANGED
@@ -1,102 +1,116 @@
1
- # README:data-structure-typed
1
+ # data-structure-typed
2
2
 
3
- 一个包含生产级实现的完整 TypeScript 数据结构库。
3
+ [English](./README.md) | 简体中文
4
4
 
5
- **📚 [快速开始](#-快速开始30秒) • [完整文档](./docs/CONCEPTS_CN.md) • [API 参考](./docs/REFERENCE_CN.md) • [示例](./docs/GUIDES_CN.md)**
5
+ 一个全面的 TypeScript 数据结构库,包含生产就绪的实现。
6
+
7
+ ![npm](https://img.shields.io/npm/dm/data-structure-typed)
8
+ ![GitHub contributors](https://img.shields.io/github/contributors/zrwusa/data-structure-typed)
9
+ ![npm package minimized gzipped size (select exports)](https://img.shields.io/bundlejs/size/data-structure-typed)
10
+ ![GitHub top language](https://img.shields.io/github/languages/top/zrwusa/data-structure-typed)
11
+ ![GITHUB Star](https://img.shields.io/github/stars/zrwusa/data-structure-typed)
12
+ ![eslint](https://aleen42.github.io/badges/src/eslint.svg)
13
+ ![NPM](https://img.shields.io/npm/l/data-structure-typed)
14
+ ![npm](https://img.shields.io/npm/v/data-structure-typed)
15
+
16
+ **📚 [安装](#-安装) • [快速开始](#-快速开始30-秒) • [完整文档](#-文档) • [API 参考](./docs/REFERENCE_CN.md) • [Playground](#-playground) • [示例](./docs/GUIDES_CN.md)**
6
17
 
7
18
  ---
8
19
 
9
20
  ## 目录
10
21
 
11
- 1. [谁应该使用这个库?](#-谁应该使用这个库)
22
+ 1. [谁应该使用本库?](#-谁应该使用本库)
12
23
  2. [为什么不直接用 Array 或 Map?](#-为什么不直接用-array-或-map)
13
- 3. [关键特性](#-关键特性)
24
+ 3. [主要特性](#-主要特性)
14
25
  4. [安装](#-安装)
15
- 5. [快速开始](#-快速开始30)
26
+ 5. [快速开始](#-快速开始30-秒)
16
27
  6. [可用的数据结构](#-可用的数据结构)
17
28
  7. [文档](#-文档)
18
29
 
19
30
  ---
20
31
 
21
- ## 🎯 谁应该使用这个库?
32
+ ## 🎯 谁应该使用本库?
22
33
 
23
- **如果您在 TypeScript 中构建排序集合、调度队列或排序数据结构,**
24
- **可以考虑使用 `data-structure-typed` 而不是手工编写的 Array 或 Map。**
34
+ **如果你正在构建排名集合、调度队列或排序数据结构,**
35
+ **考虑使用 `data-structure-typed` 而不是手工编写的 Array 或 Map。**
25
36
 
26
- ### 完美应用场景:
37
+ ### 完美适用于:
27
38
 
28
- - **排行榜和排名系统**无需反复排序就能高效维护前 K 个元素
29
- - **任务调度系统**优先队列、有序执行、基于时间的操作
30
- - **实时仪表板** — Grafana 风格的工作负载和即时查询
31
- - **时间序列数据** — 有序插入 + 快速范围查询
32
- - **搜索和自动完成** — 大规模前缀匹配
33
- - **图论问题** — 路径查找、环检测、拓扑排序
39
+ - **排行榜与排名**高效维护前 K 个数据,无需重复排序
40
+ - **任务调度**优先级队列、有序执行、基于时间的操作
41
+ - **实时仪表板** — Grafana 风格的工作负载,支持即时查询
42
+ - **时间序列数据** — 排序插入 + 快速范围查询
43
+ - **搜索与自动完成** — 大规模前缀匹配
44
+ - **图论问题** — 路径查找、循环检测、拓扑排序
34
45
 
35
46
  ---
36
47
 
37
48
  ## ⚡ 为什么不直接用 Array 或 Map?
38
49
 
39
- | 使用场景 | Array | Map | data-structure-typed |
40
- |---------|-------|-----|:---:|
41
- | **排序查询** | ❌ O(n) | ❌ 无序 | ✅ **O(log n)** |
42
- | **指定位置插入** | ❌ O(n) shift | ❌ 无位置概念 | ✅ **O(log n)** |
43
- | **排行榜前 K** | ❌ 重新排序 O(n log n) | ❌ 需手动排序 | ✅ **即时** |
44
- | **从前面移除** | ❌ O(n) | ❌ 无出队操作 | ✅ **O(1)** |
45
- | **前缀搜索** | ❌ O(n*m) | ❌ 不适用 | ✅ **O(m + k)** |
46
- | **熟悉的 API** | ✅ 是 | ✅ 是 | ✅ **相同** |
50
+ | 使用场景 | Array | Map | data-structure-typed |
51
+ |------------------------|----------------------|------------------|:--------------------:|
52
+ | **排序查询** | ❌ O(n) | ❌ 无序 | ✅ **O(log n)** |
53
+ | **在特定位置插入** | ❌ O(n) shift | ❌ 无位置 | ✅ **O(log n)** |
54
+ | **排行榜前 K** | ❌ 重新排序 O(n log n) | ❌ 手动排序 | ✅ **即时** |
55
+ | **从前面移除** | ❌ O(n) | ❌ 无出队 | ✅ **O(1)** |
56
+ | **前缀搜索** | ❌ O(n*m) | ❌ 不适用 | ✅ **O(m + k)** |
57
+ | **熟悉的 API** | ✅ 是 | ✅ 是 | ✅ **相同** |
47
58
 
48
- ### 真实场景的痛点
59
+ ### 真实场景痛点
49
60
 
50
61
  ```javascript
51
62
  // ❌ 不使用 data-structure-typed
52
63
  const queue = [1, 2, 3, ..., 100000];
53
64
  for (let i = 0; i < 100000; i++) {
54
- queue.shift(); // O(n) - 重新索引每个元素!
65
+ queue.shift(); // O(n) - 重新索引所有元素!
55
66
  }
56
- // 耗时:2829ms ❌
67
+ // 耗时: 2829ms ❌
68
+ ```
57
69
 
70
+ ```javascript
58
71
  // ✅ 使用 data-structure-typed (Deque)
59
72
  const deque = new Deque([1, 2, 3, ..., 100000]);
60
73
  for (let i = 0; i < 100000; i++) {
61
- deque.shift(); // O(1) - 只是移动指针
74
+ deque.shift(); // O(1) - 仅移动指针
62
75
  }
63
- // 耗时:5.83ms ✅
76
+ // 耗时: 5.83ms ✅
64
77
  // **快 484 倍!**
65
78
  ```
66
79
 
67
80
  ---
68
81
 
69
- ## 🚀 性能(简版)
82
+ ## 🚀 性能 (简版)
70
83
 
71
- - **热路径性能提升 10-40%**
84
+ - **快 10-40%** 比常见 JS 实现在热路径中
72
85
  - Array.sort() O(n log n) → TreeSet O(log n) 插入
73
86
  - 重复 Array.shift() O(n) → Queue O(1)
74
- - 手动索引追踪 → RB-Tree 自动平衡
87
+ - 手动索引跟踪 → RB-Tree 自动平衡
75
88
 
76
- - **针对 V8 JIT 优化**(Node.js 18+,现代浏览器)
89
+ - **针对 V8 JIT 优化** (Node.js 18+、现代浏览器)
77
90
 
78
- - **可树摇动的** ESM / CJS / 传统版本
91
+ - **Tree-shakable** ESM / CJS / 旧版构建
79
92
 
80
93
  📊 [完整基准测试 →](./docs/PERFORMANCE_CN.md)
81
94
 
82
95
  ---
83
96
 
84
- ## ✨ 关键特性
97
+ ## ✨ 主要特性
85
98
 
86
99
  ### 🏠 统一的 API
87
100
 
88
- 不需要学习新 API。只需在任何地方使用 `push`、`pop`、`map`、`filter` 和 `reduce`。
101
+ 不需要学习新 API。在任何地方都使用 `push`、`pop`、`map`、`filter` 和 `reduce`。
89
102
 
90
103
  ```javascript
91
104
  // 所有线性结构使用相同的 4 个方法
92
105
  const deque = new Deque([1, 2, 3]);
93
106
  const queue = new Queue([1, 2, 3]);
94
- const stack = new Stack([1, 2, 3]);
107
+ const doublyLinkeList = new DoublyLinkedList([1, 2, 3]);
108
+ const singlyLinkedList = new SinglyLinkedList([1, 2, 3]);
95
109
 
96
110
  // 它们都支持:
97
111
  structure.push(item); // 添加到末尾
98
- structure.pop(); // 从末尾移除
99
- structure.shift(); // 从开头移除
112
+ structure.pop(); // 移除末尾
113
+ structure.shift(); // 移除开头
100
114
  structure.unshift(item); // 添加到开头
101
115
  ```
102
116
 
@@ -110,17 +124,17 @@ tree.set(1, 'Alice');
110
124
  tree.set(2, 'Bob');
111
125
 
112
126
  // 类型安全的访问
113
- const value = tree.get(1); // 类型:string | undefined
127
+ const value = tree.get(1); // 类型: string | undefined
114
128
  ```
115
129
 
116
130
  ### ✨ 零摩擦
117
131
 
118
- 到处都能用。展开它 `[...]`、循环它 `for..of`、立即转换它。
132
+ 随处可用。使用扩展运算符 `[...]`、for...of 循环它、立即转换它。
119
133
 
120
134
  ```javascript
121
135
  // 所有数据结构都支持迭代器协议
122
136
  const tree = new RedBlackTree([5, 2, 8]);
123
- const sorted = [...tree]; // 展开操作符
137
+ const sorted = [...tree]; // 扩展运算符
124
138
  for (const item of tree) {
125
139
  } // for...of 循环
126
140
  const set = new Set(tree); // Set 构造器
@@ -142,9 +156,9 @@ npm i data-structure-typed --save
142
156
  yarn add data-structure-typed
143
157
  ```
144
158
 
145
- ### 独立包
159
+ ### 单个包
146
160
 
147
- 只使用需要的部分:
161
+ 仅使用你需要的:
148
162
 
149
163
  ```bash
150
164
  pnpm add heap-typed deque-typed red-black-tree-typed
@@ -152,29 +166,29 @@ pnpm add heap-typed deque-typed red-black-tree-typed
152
166
 
153
167
  ---
154
168
 
155
- ## 💡 何时考虑使用这个库?
169
+ ## 💡 我应该何时考虑使用本库?
156
170
 
157
- **当您需要:**
171
+ **当你需要:**
158
172
 
159
- - 无需重复排序就能进行前 K 元素查询
160
- - 同时具有插入顺序和查询性能
161
- - 具有快速位置访问的优先队列
162
- - 具有范围查询的时间序列数据
163
- - Red-Black Tree / Heap 性能而无需学习新 API
173
+ - K 个查询 / 排行榜而无需重复排序
174
+ - 同时实现插入顺序和查询性能
175
+ - 带有快速位置访问的优先级队列
176
+ - 支持范围查询的时间序列数据
177
+ - RedBlackTree / Heap 性能而无需学习新 API
164
178
 
165
- **当您的代码中有:**
179
+ **当你的代码有:**
166
180
 
167
- - `array.sort()` 在热路径中(请求处理程序、循环)
168
- - 插入后的手动索引追踪
169
- - 大列表上的 `Array.shift()`(队列)
170
- - 跨文件重复的自定义排序逻辑
171
- - 需要有序的 Map
181
+ - 在热路径中使用 `array.sort()`(请求处理程序、循环)
182
+ - 插入后的手动索引跟踪
183
+ - 在大列表上使用 `Array.shift()`(队列)
184
+ - 在文件中重复的自定义排序逻辑
185
+ - 需要排序的 Map
172
186
 
173
187
  ---
174
188
 
175
189
  ## 🚀 快速开始:30 秒
176
190
 
177
- ### 排行榜(排序集合)
191
+ ### 排行榜(排名集合)
178
192
 
179
193
  ```typescript
180
194
  import { RedBlackTree } from 'data-structure-typed';
@@ -185,7 +199,7 @@ const leaderboard = new RedBlackTree([
185
199
  [92, 'Charlie']
186
200
  ]);
187
201
 
188
- // 获取排序分数(自动维护!)
202
+ // 获取排序的分数(自动维护!)
189
203
  for (const [score, player] of leaderboard) {
190
204
  console.log(`${player}: ${score}`);
191
205
  }
@@ -198,7 +212,7 @@ for (const [score, player] of leaderboard) {
198
212
  leaderboard.delete(85);
199
213
  leaderboard.set(95, 'Bob'); // O(log n)
200
214
 
201
- // 查询前玩家
215
+ // 查询前几名玩家
202
216
  const topPlayers = [...leaderboard.values()].reverse().slice(0, 3);
203
217
  ```
204
218
 
@@ -207,7 +221,7 @@ const topPlayers = [...leaderboard.values()].reverse().slice(0, 3);
207
221
  ```typescript
208
222
  import { MaxPriorityQueue } from 'data-structure-typed';
209
223
 
210
- const taskQueue = new MaxPriorityQueue([], {
224
+ const taskQueue = new MaxPriorityQueue<{priority: number; task: string}>([], {
211
225
  comparator: (a, b) => b.priority - a.priority
212
226
  });
213
227
 
@@ -217,244 +231,69 @@ taskQueue.add({ priority: 9, task: 'Alert' }); // 即时优先级处理
217
231
  const nextTask = taskQueue.poll(); // { priority: 9, task: 'Alert' }
218
232
  ```
219
233
 
220
- ### 快速队列(FIFO
234
+ ### 快速队列 (FIFO)
221
235
 
222
236
  ```typescript
223
237
  import { Deque } from 'data-structure-typed';
224
238
 
225
239
  const queue = new Deque([1, 2, 3, 4, 5]);
226
- queue.shift(); // 从前面移除:O(1) 不是 O(n)
227
- queue.push(6); // 添加到后面:O(1)
240
+ queue.shift(); // 从前面移除: O(1) 而不是 O(n)
241
+ queue.push(6); // 添加到后面: O(1)
228
242
  ```
229
243
 
230
244
  ---
231
245
 
232
246
  ## 📊 可用的数据结构
233
247
 
234
- | 结构 | 使用场景 | 时间复杂度 | NPM |
235
- |------|---------|----------|-----|
236
- | **RedBlackTree** | 排序集合、范围查询 | O(log n) | [npm](https://www.npmjs.com/package/red-black-tree-typed) |
237
- | **Heap / PriorityQueue** | 任务调度、前 K 元素 | O(log n) | [npm](https://www.npmjs.com/package/heap-typed) |
238
- | **Deque** | 快速首尾操作 | O(1) | [npm](https://www.npmjs.com/package/deque-typed) |
239
- | **Trie** | 自动完成、前缀搜索 | O(m+k) | [npm](https://www.npmjs.com/package/trie-typed) |
240
- | **DirectedGraph** | 路径查找、DAG 算法 | O(V+E) | [npm](https://www.npmjs.com/package/directed-graph-typed) |
241
- | **Stack** | 撤销/重做、表达式解析 | O(1) | [npm](https://www.npmjs.com/package/stack-typed) |
242
- | **LinkedList** | 动态大小、无索引偏移 | O(1)* | [npm](https://www.npmjs.com/package/linked-list-typed) |
243
- | **AVLTree** | 比 RB-Tree 更严格的平衡 | O(log n) | [npm](https://www.npmjs.com/package/avl-tree-typed) |
244
-
245
- 👉 [查看所有 20+ 结构 →](./docs/REFERENCE_CN.md)
246
-
247
- ---
248
-
249
- ## 📖 文档
250
-
251
- ### 不同使用场景
252
-
253
- | 您的目标 | 从这里开始 | 后续步骤 |
254
- |---------|----------|---------|
255
- | **学习概念** | [CONCEPTS_CN.md](./docs/CONCEPTS_CN.md) | [GUIDES_CN.md](./docs/GUIDES_CN.md) |
256
- | **在项目中使用** | [GUIDES_CN.md](./docs/GUIDES_CN.md) | [REFERENCE_CN.md](./docs/REFERENCE_CN.md) |
257
- | **查询 API** | [REFERENCE_CN.md](./docs/REFERENCE_CN.md) | [PERFORMANCE_CN.md](./docs/PERFORMANCE_CN.md) |
258
- | **性能问题** | [PERFORMANCE_CN.md](./docs/PERFORMANCE_CN.md) | [ARCHITECTURE_CN.md](./ARCHITECTURE_CN.md) |
259
- | **框架集成** | [INTEGRATIONS_CN.md](./docs/INTEGRATIONS_CN.md) | [GUIDES_CN.md](./docs/GUIDES_CN.md) |
260
- | **理解设计** | [ARCHITECTURE_CN.md](./ARCHITECTURE_CN.md) | [CONCEPTS_CN.md](./docs/CONCEPTS_CN.md) |
261
-
262
- ### 文档文件
263
-
264
- 1. **[CONCEPTS_CN.md](./docs/CONCEPTS_CN.md)** - 核心基础和理论
265
- - 三大核心概念(BST、平衡树、堆)
266
- - 13 个易于理解的解释
267
- - 迭代器协议设计
268
- - 5 个与原生 JavaScript 的对比
269
- - 完整的决策指南
270
-
271
- 2. **[REFERENCE_CN.md](./docs/REFERENCE_CN.md)** - 完整 API 和数据结构
272
- - 快速参考表
273
- - 所有 20+ 结构及示例
274
- - CRUD 操作
275
- - 常见方法
276
- - TypeScript 支持
277
-
278
- 3. **[ARCHITECTURE_CN.md](./ARCHITECTURE_CN.md)** - 设计和实现
279
- - 设计理念和原则
280
- - 3 个解决的痛点
281
- - 为什么 Deque 快 484 倍
282
- - 迭代器协议设计
283
- - 自平衡策略
284
- - V8 JIT 优化
285
-
286
- 4. **[PERFORMANCE_CN.md](./docs/PERFORMANCE_CN.md)** - 基准和对比
287
- - 性能摘要
288
- - 3 个真实场景
289
- - 详细基准
290
- - 何时使用什么
291
- - 优化技巧
292
-
293
- 5. **[GUIDES_CN.md](./docs/GUIDES_CN.md)** - 真实示例
294
- - 4 个设计模式
295
- - 5 个生产代码示例
296
- - 常见错误
297
- - 最佳实践
298
-
299
- 6. **[INTEGRATIONS_CN.md](./docs/INTEGRATIONS_CN.md)** - 框架集成
300
- - React 集成(状态管理、排行榜)
301
- - Express 集成(LRU 缓存、速率限制)
302
- - Nest.js 集成(排名服务、任务队列)
303
- - TypeScript 配置
248
+ | 结构 | 用途 | 时间复杂度 |
249
+ |----------------|----------------------------------|:------------------------:|
250
+ | **Array** | 基础顺序存储 | O(1) 访问,O(n) 插入 |
251
+ | **LinkedList** | 链式存储 | O(n) 访问,O(1) 插入 |
252
+ | **Stack** | LIFO (后进先出) | O(1) 推入/弹出 |
253
+ | **Queue** | FIFO (先进先出) | O(1) 入队/出队 |
254
+ | **Deque** | 双端队列 | O(1) 两端操作 |
255
+ | **Heap** | 优先级访问 | O(1) 查看,O(log n) 修改 |
256
+ | **BST** | 排序范围查询 | O(log n) 平衡时 |
257
+ | **RedBlackTree** | 自平衡树 | O(log n) 保证 |
258
+ | **AVL Tree** | 严格平衡树 | O(log n) 保证 |
259
+ | **Trie** | 前缀搜索 | O(m) m 是字符串长度 |
260
+ | **Graph** | 网络结构 | 取决于实现 |
304
261
 
305
262
  ---
306
263
 
307
- ## 💻 真实示例
308
-
309
- ### LRU 缓存
310
-
311
- ```typescript
312
- class LRUCache<K, V> {
313
- private cache = new Map<K, V>();
314
- private order = new DoublyLinkedList<K>();
315
-
316
- get(key: K): V | null {
317
- if (!this.cache.has(key)) return null;
318
- // 移动到末尾(最近使用)
319
- // 使用 O(1) 操作高效处理
320
- return this.cache.get(key)!;
321
- }
322
- }
323
- ```
324
-
325
- ### 排行榜
326
-
327
- ```typescript
328
- class Leaderboard {
329
- private scores = new RedBlackTree<number, Player>(
330
- (a, b) => b - a // 降序
331
- );
332
-
333
- getTopN(n: number): Player[] {
334
- return [...this.scores.values()].slice(0, n);
335
- }
336
- }
337
- ```
338
-
339
- ### 消息队列
340
-
341
- ```typescript
342
- class MessageQueue {
343
- private urgent = new Deque<Message>();
344
- private normal = new Deque<Message>();
345
-
346
- dequeue(): Message | null {
347
- return this.urgent.shift() || this.normal.shift();
348
- }
349
- }
350
- ```
351
-
352
- 👉 [更多示例请见 GUIDES_CN.md](./docs/GUIDES_CN.md)
353
-
354
- ---
355
-
356
- ## 🎯 按行业的使用场景
357
-
358
- ### 📊 金融
359
-
360
- - 价格排序的订单簿
361
- - 实时投资组合排名
362
- - 期权链排序
363
-
364
- ### 🎮 游戏
264
+ ## 🎮 Playground
365
265
 
366
- - 玩家排行榜
367
- - 敌人优先级队列
368
- - 游戏事件调度
266
+ 🏃🏻‍♀️ 立即尝试:
369
267
 
370
- ### 📱 社交媒体
268
+ - [Node.js TypeScript](https://stackblitz.com/edit/stackblitz-starters-e1vdy3zw?file=src%2Findex.ts)
269
+ - [Node.js JavaScript](https://stackblitz.com/edit/stackblitz-starters-oczhrfzn?file=src%2Findex.js)
270
+ - [React TypeScript](https://stackblitz.com/edit/vitejs-vite-7bva1zhd?file=src%2FApp.tsx)
271
+ - [NestJS](https://stackblitz.com/edit/nestjs-typescript-starter-q9n7okgc?file=src%2Fproduct%2Fservices%2Fproduct-price-index.service.ts)
371
272
 
372
- - 趋势帖子(前 K)
373
- - 信息流排序
374
- - 通知调度
375
-
376
- ### 🏥 医疗保健
377
-
378
- - 患者优先级队列
379
- - 约诊调度
380
- - 医疗记录组织
381
-
382
- ### 🛒 电子商务
383
-
384
- - 产品价格范围
385
- - 库存管理
386
- - 订单调度
387
-
388
- ---
389
-
390
- ## ✨ 开发者为什么喜欢这个库
391
-
392
- | 痛点 | 解决方案 |
393
- |-----|---------|
394
- | 重复排序拖累代码速度 | TreeSet 自动维护顺序 |
395
- | 循环中 Array.shift 超时 | Deque O(1) shift 而不是 O(n) |
396
- | 学习不同的 API | 所有结构使用 push/pop/shift/unshift |
397
- | 类型安全噩梦 | 完整的 TypeScript 泛型支持 |
398
- | 浏览器兼容性问题 | 在任何地方工作:Node、浏览器、CDN |
399
-
400
- ---
401
-
402
- ## 📦 您将获得什么
403
-
404
- ✅ **6 个核心文档文件**(2500+ 行)
405
- ✅ **20+ 个数据结构**(生产级)
406
- ✅ **50+ 个代码示例**(真实模式)
407
- ✅ **完整 TypeScript 支持**(严格类型)
408
- ✅ **性能基准**(484 倍加速)
409
- ✅ **框架集成**(React、Express、Nest.js)
410
-
411
- ---
412
-
413
- ## 🚀 开始使用
414
-
415
- ### 步骤 1:安装
416
-
417
- ```bash
418
- npm i data-structure-typed
419
- ```
420
-
421
- ### 步骤 2:导入
422
-
423
- ```typescript
424
- import { RedBlackTree, Deque, MaxPriorityQueue } from 'data-structure-typed';
425
- ```
426
-
427
- ### 步骤 3:使用
428
-
429
- ```typescript
430
- const tree = new RedBlackTree([5, 2, 8]);
431
- console.log([...tree]); // [2, 5, 8] - 自动排序!
432
- ```
433
-
434
- ### 步骤 4:了解更多
273
+ ### 4 步:了解更多
435
274
 
436
275
  👉 查看 [CONCEPTS_CN.md](./docs/CONCEPTS_CN.md) 了解核心概念
437
- 👉 查看 [GUIDES_CN.md](./docs/GUIDES_CN.md) 获取生产示例
438
- 👉 阅读 [REFERENCE_CN.md](./docs/REFERENCE_CN.md) 获取完整 API
276
+ 👉 查看 [GUIDES_CN.md](./docs/GUIDES_CN.md) 了解生产示例
277
+ 👉 阅读 [REFERENCE_CN.md](./docs/REFERENCE_CN.md) 了解完整 API
439
278
 
440
279
  ---
441
280
 
442
- ## 📊 对比表
281
+ ## 📊 对比图表
443
282
 
444
283
  ```
445
- 需要频繁的头尾操作?
284
+ 需要频繁头尾操作?
446
285
  → Deque (O(1) shift/unshift/push/pop)
447
286
 
448
- 需要排序 + 快速查询?
287
+ 需要排序 + 快速查找?
449
288
  → RedBlackTree (O(log n) 保证)
450
289
 
451
290
  需要最高/最低优先级?
452
- → Heap/PriorityQueue (O(log n) add/remove)
291
+ → Heap/PriorityQueue (O(log n) 添加/删除)
453
292
 
454
293
  需要前缀/文本匹配?
455
294
  → Trie (O(m+k) 其中 m=前缀)
456
295
 
457
- 需要图操作?
296
+ 需要图论操作?
458
297
  → DirectedGraph/UndirectedGraph
459
298
 
460
299
  否则?
@@ -465,11 +304,11 @@ console.log([...tree]); // [2, 5, 8] - 自动排序!
465
304
 
466
305
  ## 🤝 贡献
467
306
 
468
- 发现 bug?有建议?[开启 issue](https://github.com/zrwusa/data-structure-typed/issues)
307
+ 找到 bug?有建议?[提出 issue](https://github.com/zrwusa/data-structure-typed/issues)
469
308
 
470
309
  ---
471
310
 
472
- ## 📄 许可证
311
+ ## 📄 许可
473
312
 
474
313
  MIT
475
314
 
@@ -478,25 +317,28 @@ MIT
478
317
  ## 📚 完整文档结构
479
318
 
480
319
  ```
320
+ README.md (本文件)
481
321
  docs/
482
- ├── README_CN.md (本文件)
483
- ├── CONCEPTS_CN.md (理论和基础)
322
+ ├── CONCEPTS_CN.md (理论与基础)
484
323
  ├── REFERENCE_CN.md (API 文档)
485
324
  ├── ARCHITECTURE_CN.md (设计原则)
325
+ ├── ARCHITECTURE_CN.md (设计细节)
486
326
  ├── PERFORMANCE_CN.md (基准测试)
487
- ├── GUIDES_CN.md (真实示例)
488
- └── INTEGRATIONS_CN.md (框架指南)
327
+ ├── PERFORMANCE_CN.md (详细基准)
328
+ ├── GUIDES_CN.md (实战示例)
329
+ ├── INTEGRATIONS_CN.md (框架指南)
330
+ └── INTEGRATIONS_CN.md (完整集成)
489
331
  ```
490
332
 
491
333
  ---
492
334
 
493
335
  ## 🎓 了解更多
494
336
 
495
- **刚入门?** → [快速开始](#-快速开始30)
337
+ **刚开始?** → [快速开始](#-快速开始30-秒)
496
338
 
497
339
  **需要概念?** → [CONCEPTS_CN.md](./docs/CONCEPTS_CN.md)
498
340
 
499
- **想要构建?** → [GUIDES_CN.md](./docs/GUIDES_CN.md)
341
+ **想构建?** → [GUIDES_CN.md](./docs/GUIDES_CN.md)
500
342
 
501
343
  **需要 API?** → [REFERENCE_CN.md](./docs/REFERENCE_CN.md)
502
344
 
@@ -504,6 +346,8 @@ docs/
504
346
 
505
347
  **框架问题?** → [INTEGRATIONS_CN.md](./docs/INTEGRATIONS_CN.md)
506
348
 
349
+ **深入设计?** → [ARCHITECTURE_CN.md](./docs/ARCHITECTURE_CN.md)
350
+
507
351
  ---
508
352
 
509
- **准备好提升您的 TypeScript 数据结构了吗?[现在开始 →](#-快速开始30)**
353
+ **准备好加速你的 TypeScript 数据结构了吗?[现在开始 →](#-快速开始30-秒)**
@@ -10,5 +10,5 @@
10
10
  .content table tr:nth-child(odd) { background:#fff; }
11
11
  </style></head><body><div class="content">
12
12
  <div class="json-to-html-title">Benchmark Report</div>
13
- <h2>red-black-tree</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>508.80</td><td>407.39</td><td>735.02</td><td>±16.47%</td></tr><tr><td>1,000,000 get</td><td>3.60</td><td>2.59</td><td>10.73</td><td>±12.76%</td></tr><tr><td>1,000,000 iterator</td><td>181.28</td><td>131.67</td><td>399.35</td><td>±21.13%</td></tr><tr><td>Competitor 1,000,000 set</td><td>657.36</td><td>646.08</td><td>668.05</td><td>±0.94%</td></tr><tr><td>Competitor 1,000,000 get</td><td>707.92</td><td>661.39</td><td>774.77</td><td>±4.43%</td></tr></tbody></table><h2>queue</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>26.83</td><td>21.26</td><td>67.52</td><td>±7.94%</td></tr><tr><td>100,000 push & shift</td><td>2.71</td><td>2.40</td><td>3.56</td><td>±1.99%</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1214.60</td><td>1060.42</td><td>1423.06</td><td>±10.02%</td></tr></tbody></table><h2>deque</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>8.85</td><td>8.48</td><td>9.64</td><td>±0.50%</td></tr><tr><td>1,000,000 push & pop</td><td>13.52</td><td>13.02</td><td>14.76</td><td>±0.54%</td></tr><tr><td>1,000,000 push & shift</td><td>14.08</td><td>13.62</td><td>15.34</td><td>±0.51%</td></tr><tr><td>100,000 push & shift</td><td>1.35</td><td>1.31</td><td>1.44</td><td>±0.33%</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1429.15</td><td>944.17</td><td>1975.05</td><td>±26.96%</td></tr><tr><td>100,000 unshift & shift</td><td>1.29</td><td>1.25</td><td>1.54</td><td>±0.68%</td></tr><tr><td>Native JS Array 100,000 unshift & shift</td><td>2200.25</td><td>1844.73</td><td>2839.30</td><td>±17.78%</td></tr></tbody></table><h2>heap</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>100,000 add</td><td>4.70</td><td>4.36</td><td>5.15</td><td>±0.81%</td></tr><tr><td>100,000 add & poll</td><td>17.31</td><td>16.65</td><td>18.67</td><td0.57%</td></tr></tbody></table><h2>avl-tree</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>100,000 set randomly</td><td>354.58</td><td>320.37</td><td>396.77</td><td>±5.90%</td></tr><tr><td>100,000 set</td><td>310.29</td><td>294.79</td><td>362.25</td><td>±4.57%</td></tr><tr><td>100,000 get</td><td>0.26</td><td>0.25</td><td>0.29</td><td>±0.44%</td></tr><tr><td>100,000 getNode</td><td>199.21</td><td>170.37</td><td>228.69</td><td>±4.40%</td></tr><tr><td>100,000 iterator</td><td>15.41</td><td>13.39</td><td>29.67</td><td>±4.05%</td></tr><tr><td>100,000 set & delete orderly</td><td>436.63</td><td>426.38</td><td>457.78</td><td>±1.52%</td></tr><tr><td>100,000 set & delete randomly</td><td>526.98</td><td>512.67</td><td>544.63</td><td>±1.87%</td></tr></tbody></table><h2>hash-map</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>40.68</td><td>33.35</td><td>59.21</td><td>±4.69%</td></tr><tr><td>Native JS Map 1,000,000 set</td><td>144.13</td><td>131.77</td><td>167.71</td><td>±3.43%</td></tr><tr><td>Native JS Set 1,000,000 add</td><td>112.65</td><td>104.13</td><td>148.36</td><td>±4.84%</td></tr><tr><td>1,000,000 set & get</td><td>45.40</td><td>36.83</td><td>57.24</td><td>±4.56%</td></tr><tr><td>Native JS Map 1,000,000 set & get</td><td>195.80</td><td>184.61</td><td>220.64</td><td>±3.12%</td></tr><tr><td>Native JS Set 1,000,000 add & has</td><td>159.47</td><td>148.45</td><td>196.09</td><td4.13%</td></tr><tr><td>1,000,000 ObjKey set & get</td><td>239.09</td><td>210.63</td><td>272.97</td><td>±5.14%</td></tr><tr><td>Native JS Map 1,000,000 ObjKey set & get</td><td>207.48</td><td>181.81</td><td>240.56</td><td>±5.90%</td></tr><tr><td>Native JS Set 1,000,000 ObjKey add & has</td><td>188.86</td><td>162.40</td><td>246.83</td><td>±8.41%</td></tr></tbody></table><h2>directed-graph</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000 addVertex</td><td>0.05</td><td>0.04</td><td>0.05</td><td>±0.37%</td></tr><tr><td>1,000 addEdge</td><td>3.00</td><td>2.78</td><td>5.35</td><td>±2.48%</td></tr><tr><td>1,000 getVertex</td><td>0.04</td><td>0.04</td><td>0.04</td><td>±0.52%</td></tr><tr><td>1,000 getEdge</td><td>44.78</td><td>40.89</td><td>97.02</td><td>±5.62%</td></tr><tr><td>tarjan</td><td>241.55</td><td>235.87</td><td>269.07</td><td>±1.82%</td></tr><tr><td>topologicalSort</td><td>200.74</td><td>197.47</td><td>219.65</td><td>±1.30%</td></tr></tbody></table><h2>trie</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>100,000 push</td><td>27.66</td><td>25.13</td><td>37.31</td><td>±1.98%</td></tr><tr><td>100,000 getWords</td><td>64.62</td><td>37.66</td><td>288.42</td><td>±29.56%</td></tr></tbody></table><h2>stack</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>26.57</td><td>22.36</td><td>33.50</td><td>±3.44%</td></tr><tr><td>1,000,000 push & pop</td><td>30.30</td><td>25.14</td><td>55.18</td><td>±4.78%</td></tr></tbody></table>
13
+ <h2>red-black-tree</h2><table><thead><tr><th>Test Case</th><th>Latency Avg (ms)</th><th>Min (ms)</th><th>Max (ms)</th><th>Stability</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>2544.36</td><td>2387.12</td><td>2869.15</td><td>±8.37%</td></tr><tr><td>1,000,000 get</td><td>54.20</td><td>52.66</td><td>72.16</td><td>±1.47%</td></tr><tr><td>1,000,000 iterator</td><td>484.95</td><td>470.10</td><td>542.07</td><td>±3.63%</td></tr><tr><td>Competitor 1,000,000 set</td><td>676.05</td><td>651.85</td><td>729.81</td><td>±4.07%</td></tr><tr><td>Competitor 1,000,000 get</td><td>682.61</td><td>675.91</td><td>699.91</td><td>±1.00%</td></tr></tbody></table>
14
14
  </div></body></html>