data-structure-typed 2.5.2 → 2.6.0

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 (162) hide show
  1. package/.husky/pre-commit +3 -0
  2. package/CHANGELOG.md +3 -1
  3. package/MIGRATION.md +217 -0
  4. package/README.md +80 -8
  5. package/README_CN.md +569 -143
  6. package/SPECIFICATION.md +44 -14
  7. package/SPECIFICATION.zh-CN.md +44 -14
  8. package/dist/cjs/binary-tree.cjs +5841 -1678
  9. package/dist/cjs/graph.cjs +422 -14
  10. package/dist/cjs/hash.cjs +95 -7
  11. package/dist/cjs/heap.cjs +174 -16
  12. package/dist/cjs/index.cjs +7751 -2449
  13. package/dist/cjs/linked-list.cjs +443 -2
  14. package/dist/cjs/matrix.cjs +56 -0
  15. package/dist/cjs/priority-queue.cjs +172 -14
  16. package/dist/cjs/queue.cjs +435 -0
  17. package/dist/cjs/stack.cjs +103 -4
  18. package/dist/cjs/trie.cjs +106 -0
  19. package/dist/cjs-legacy/binary-tree.cjs +5933 -1772
  20. package/dist/cjs-legacy/graph.cjs +422 -14
  21. package/dist/cjs-legacy/hash.cjs +95 -7
  22. package/dist/cjs-legacy/heap.cjs +174 -16
  23. package/dist/cjs-legacy/index.cjs +8154 -2854
  24. package/dist/cjs-legacy/linked-list.cjs +443 -2
  25. package/dist/cjs-legacy/matrix.cjs +56 -0
  26. package/dist/cjs-legacy/priority-queue.cjs +172 -14
  27. package/dist/cjs-legacy/queue.cjs +435 -0
  28. package/dist/cjs-legacy/stack.cjs +103 -4
  29. package/dist/cjs-legacy/trie.cjs +106 -0
  30. package/dist/esm/binary-tree.mjs +5841 -1678
  31. package/dist/esm/graph.mjs +422 -14
  32. package/dist/esm/hash.mjs +95 -7
  33. package/dist/esm/heap.mjs +174 -16
  34. package/dist/esm/index.mjs +7751 -2449
  35. package/dist/esm/linked-list.mjs +443 -2
  36. package/dist/esm/matrix.mjs +56 -0
  37. package/dist/esm/priority-queue.mjs +172 -14
  38. package/dist/esm/queue.mjs +435 -0
  39. package/dist/esm/stack.mjs +103 -4
  40. package/dist/esm/trie.mjs +106 -0
  41. package/dist/esm-legacy/binary-tree.mjs +5933 -1772
  42. package/dist/esm-legacy/graph.mjs +422 -14
  43. package/dist/esm-legacy/hash.mjs +95 -7
  44. package/dist/esm-legacy/heap.mjs +174 -16
  45. package/dist/esm-legacy/index.mjs +8154 -2854
  46. package/dist/esm-legacy/linked-list.mjs +443 -2
  47. package/dist/esm-legacy/matrix.mjs +56 -0
  48. package/dist/esm-legacy/priority-queue.mjs +172 -14
  49. package/dist/esm-legacy/queue.mjs +435 -0
  50. package/dist/esm-legacy/stack.mjs +103 -4
  51. package/dist/esm-legacy/trie.mjs +106 -0
  52. package/dist/types/data-structures/base/iterable-element-base.d.ts +17 -0
  53. package/dist/types/data-structures/base/linear-base.d.ts +6 -0
  54. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
  55. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
  56. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +191 -15
  57. package/dist/types/data-structures/binary-tree/bst.d.ts +171 -3
  58. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
  59. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
  60. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1061 -167
  61. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1232 -355
  62. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +916 -194
  63. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1078 -141
  64. package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
  65. package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
  66. package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
  67. package/dist/types/data-structures/heap/heap.d.ts +140 -12
  68. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +150 -2
  69. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
  70. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
  71. package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
  72. package/dist/types/data-structures/queue/deque.d.ts +171 -0
  73. package/dist/types/data-structures/queue/queue.d.ts +97 -0
  74. package/dist/types/data-structures/stack/stack.d.ts +72 -2
  75. package/dist/types/data-structures/trie/trie.d.ts +84 -0
  76. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  77. package/dist/umd/data-structure-typed.js +7784 -2484
  78. package/dist/umd/data-structure-typed.min.js +4 -4
  79. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +188 -200
  80. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +11 -11
  81. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +62 -62
  82. package/docs-site-docusaurus/docs/api/classes/BST.md +183 -195
  83. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +13 -13
  84. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +15 -15
  85. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +143 -155
  86. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  87. package/docs-site-docusaurus/docs/api/classes/Deque.md +99 -85
  88. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +73 -73
  89. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +100 -70
  90. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +8 -8
  91. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +12 -12
  92. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  93. package/docs-site-docusaurus/docs/api/classes/HashMap.md +38 -38
  94. package/docs-site-docusaurus/docs/api/classes/Heap.md +96 -85
  95. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +25 -25
  96. package/docs-site-docusaurus/docs/api/classes/IterableEntryBase.md +23 -23
  97. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +48 -48
  98. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +52 -52
  99. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +46 -42
  100. package/docs-site-docusaurus/docs/api/classes/LinkedListNode.md +6 -6
  101. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +74 -74
  102. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +73 -73
  103. package/docs-site-docusaurus/docs/api/classes/Matrix.md +31 -31
  104. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +104 -89
  105. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +104 -89
  106. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +104 -89
  107. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +104 -89
  108. package/docs-site-docusaurus/docs/api/classes/Navigator.md +5 -5
  109. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +103 -88
  110. package/docs-site-docusaurus/docs/api/classes/Queue.md +111 -59
  111. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +200 -212
  112. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -10
  113. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +75 -75
  114. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +6 -6
  115. package/docs-site-docusaurus/docs/api/classes/SkipList.md +37 -37
  116. package/docs-site-docusaurus/docs/api/classes/Stack.md +42 -42
  117. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +107 -36
  118. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +43 -43
  119. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +106 -35
  120. package/docs-site-docusaurus/docs/api/classes/Trie.md +43 -43
  121. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  122. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +72 -72
  123. package/docs-site-docusaurus/docs/guide/architecture.md +75 -7
  124. package/docs-site-docusaurus/docs/guide/concepts.md +53 -34
  125. package/docs-site-docusaurus/docs/guide/faq.md +53 -0
  126. package/docs-site-docusaurus/docs/guide/guides.md +8 -9
  127. package/docs-site-docusaurus/docs/guide/integrations.md +74 -177
  128. package/docs-site-docusaurus/docs/guide/overview.md +131 -17
  129. package/docs-site-docusaurus/src/pages/index.tsx +4 -0
  130. package/docs-site-docusaurus/typedoc.json +1 -0
  131. package/jest.integration.config.js +1 -2
  132. package/package.json +10 -7
  133. package/src/data-structures/base/iterable-element-base.ts +32 -0
  134. package/src/data-structures/base/linear-base.ts +11 -0
  135. package/src/data-structures/binary-tree/avl-tree.ts +88 -5
  136. package/src/data-structures/binary-tree/binary-indexed-tree.ts +98 -0
  137. package/src/data-structures/binary-tree/binary-tree.ts +242 -81
  138. package/src/data-structures/binary-tree/bst.ts +173 -7
  139. package/src/data-structures/binary-tree/red-black-tree.ts +139 -15
  140. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  141. package/src/data-structures/binary-tree/tree-map.ts +948 -36
  142. package/src/data-structures/binary-tree/tree-multi-map.ts +893 -13
  143. package/src/data-structures/binary-tree/tree-multi-set.ts +761 -33
  144. package/src/data-structures/binary-tree/tree-set.ts +1260 -251
  145. package/src/data-structures/graph/directed-graph.ts +71 -1
  146. package/src/data-structures/graph/undirected-graph.ts +64 -1
  147. package/src/data-structures/hash/hash-map.ts +100 -12
  148. package/src/data-structures/heap/heap.ts +149 -19
  149. package/src/data-structures/linked-list/doubly-linked-list.ts +178 -2
  150. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  151. package/src/data-structures/linked-list/skip-linked-list.ts +126 -0
  152. package/src/data-structures/matrix/matrix.ts +56 -0
  153. package/src/data-structures/queue/deque.ts +187 -0
  154. package/src/data-structures/queue/queue.ts +109 -0
  155. package/src/data-structures/stack/stack.ts +75 -5
  156. package/src/data-structures/trie/trie.ts +84 -0
  157. package/src/interfaces/binary-tree.ts +1 -9
  158. package/.vitepress/cache/deps_temp_51f5f1b0/chunk-7OIKW5WK.js +0 -12984
  159. package/.vitepress/cache/deps_temp_51f5f1b0/package.json +0 -3
  160. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vue_devtools-api.js +0 -4505
  161. package/.vitepress/cache/deps_temp_51f5f1b0/vitepress___@vueuse_core.js +0 -9731
  162. package/.vitepress/cache/deps_temp_51f5f1b0/vue.js +0 -347
package/SPECIFICATION.md CHANGED
@@ -101,21 +101,35 @@
101
101
 
102
102
  ```typescript
103
103
  // Add operations
104
- structure.push(element: T): number // Add to end, return length
105
- structure.unshift(element: T): number // Add to start, return length
104
+ structure.push(element: T): boolean // Add to end
105
+ structure.unshift(element: T): boolean // Add to start
106
106
 
107
107
  // Remove operations
108
108
  structure.pop(): T | undefined // Remove from end
109
109
  structure.shift(): T | undefined // Remove from start
110
+ structure.delete(element: T): boolean // Remove first match
111
+ structure.deleteAt(index: number): T | undefined // Remove at index
112
+ structure.deleteWhere(pred: Function): boolean // Remove first match by predicate
110
113
 
111
114
  // Peek operations (read without removing)
112
- structure.peek(): T | undefined // View last element
113
- structure.peekFirst(): T | undefined // View first element (Deque)
114
- structure.peekLast(): T | undefined // View last element (Deque)
115
+ structure.peek(): T | undefined // View front element (Queue/Deque/Stack)
116
+ structure.first: T | undefined // View first element (getter)
117
+ structure.last: T | undefined // View last element (getter)
118
+
119
+ // Search (back-to-front)
120
+ structure.findLast(pred: Function): T | undefined // Deque, DoublyLinkedList
121
+ structure.findLastIndex(pred: Function): number // Deque, DoublyLinkedList
122
+
123
+ // Array-compatible (migration helpers)
124
+ structure.includes(element: T): boolean // Alias for has()
125
+ structure.entries(): IterableIterator<[number, T]> // [index, value] pairs
126
+ structure.keys(): IterableIterator<number> // Index iterator
127
+ structure.toReversed(): this // Non-mutating reverse (new instance)
115
128
 
116
129
  // Size and queries
117
- structure.size: number // Element count
118
- structure.isEmpty: boolean // Check if empty
130
+ structure.size: number // Element count (Stack, Trie, etc.)
131
+ structure.length: number // Element count (Queue, Deque, LinkedList)
132
+ structure.isEmpty(): boolean // Check if empty
119
133
  ```
120
134
 
121
135
  ### Tree & Map API
@@ -124,8 +138,8 @@ structure.isEmpty: boolean // Check if empty
124
138
 
125
139
  ```typescript
126
140
  // Add/update
127
- structure.set(key: K, value: V): this
128
- structure.setMany(entries: [K, V][]): this
141
+ structure.set(key: K, value: V): this // Returns this for chaining (Map/HashMap)
142
+ structure.setMany(entries: [K, V][]): boolean[]
129
143
 
130
144
  // Query
131
145
  structure.get(key: K): V | undefined
@@ -134,6 +148,7 @@ structure.size: number
134
148
 
135
149
  // Remove
136
150
  structure.delete(key: K): boolean
151
+ structure.deleteWhere(pred: Function): boolean // TreeMap/TreeSet/LinkedHashMap
137
152
  structure.clear(): void
138
153
 
139
154
  // Iteration
@@ -148,19 +163,34 @@ structure.entries(): IterableIterator<[K, V]>
148
163
 
149
164
  ```typescript
150
165
  // Add/remove
151
- heap.push(element: T): number // Add element
152
- heap.add(element: T): number // Alias for push
153
- heap.pop(): T | undefined // Remove highest/lowest priority
154
- heap.poll(): T | undefined // Alias for pop
166
+ heap.add(element: T): boolean // Add element
167
+ heap.pop(): T | undefined // Remove highest/lowest priority
168
+ heap.poll(): T | undefined // Deprecated use pop()
169
+ heap.delete(element: T): boolean // Remove first match
170
+ heap.deleteWhere(pred: Function): boolean // Remove first match by predicate
155
171
 
156
172
  // Peek
157
173
  heap.peek(): T | undefined // View highest/lowest without removing
158
174
 
159
175
  // Query
160
176
  heap.size: number
161
- heap.isEmpty: boolean
177
+ heap.isEmpty(): boolean
162
178
  ```
163
179
 
180
+ ### TreeSet — ES2025 Set Operations
181
+
182
+ ```typescript
183
+ treeSet.union(other: Iterable<K>): TreeSet<K>
184
+ treeSet.intersection(other: Iterable<K>): TreeSet<K>
185
+ treeSet.difference(other: Iterable<K>): TreeSet<K>
186
+ treeSet.symmetricDifference(other: Iterable<K>): TreeSet<K>
187
+ treeSet.isSubsetOf(other: Iterable<K>): boolean
188
+ treeSet.isSupersetOf(other: Iterable<K>): boolean
189
+ treeSet.isDisjointFrom(other: Iterable<K>): boolean
190
+ ```
191
+
192
+ All accept any `Iterable<K>` (TreeSet, native Set, Array, generators).
193
+
164
194
  ### Array Methods (Available on All Structures)
165
195
 
166
196
  **All structures support ES6+ array methods via iteration:**
@@ -101,21 +101,35 @@
101
101
 
102
102
  ```typescript
103
103
  // 添加操作
104
- structure.push(element: T): number // 添加到末尾,返回长度
105
- structure.unshift(element: T): number // 添加到开头,返回长度
104
+ structure.push(element: T): boolean // 添加到末尾
105
+ structure.unshift(element: T): boolean // 添加到开头
106
106
 
107
107
  // 删除操作
108
108
  structure.pop(): T | undefined // 从末尾删除
109
109
  structure.shift(): T | undefined // 从开头删除
110
+ structure.delete(element: T): boolean // 删除第一个匹配
111
+ structure.deleteAt(index: number): T | undefined // 按索引删除
112
+ structure.deleteWhere(pred: Function): boolean // 按条件删除第一个匹配
110
113
 
111
114
  // 查看操作(读取但不删除)
112
- structure.peek(): T | undefined // 查看最后一个元素
113
- structure.peekFirst(): T | undefined // 查看第一个元素(Deque
114
- structure.peekLast(): T | undefined // 查看最后一个元素(Deque
115
+ structure.peek(): T | undefined // 查看队头元素(Queue/Deque/Stack)
116
+ structure.first: T | undefined // 查看第一个元素(getter
117
+ structure.last: T | undefined // 查看最后一个元素(getter
118
+
119
+ // 反向查找
120
+ structure.findLast(pred: Function): T | undefined // Deque、DoublyLinkedList
121
+ structure.findLastIndex(pred: Function): number // Deque、DoublyLinkedList
122
+
123
+ // Array 兼容(方便迁移)
124
+ structure.includes(element: T): boolean // has() 的别名
125
+ structure.entries(): IterableIterator<[number, T]> // [index, value] 对
126
+ structure.keys(): IterableIterator<number> // 索引迭代器
127
+ structure.toReversed(): this // 非破坏性反转(返回新实例)
115
128
 
116
129
  // 大小和查询
117
- structure.size: number // 元素数量
118
- structure.isEmpty: boolean // 检查是否为空
130
+ structure.size: number // 元素数量(Stack、Trie 等)
131
+ structure.length: number // 元素数量(Queue、Deque、LinkedList)
132
+ structure.isEmpty(): boolean // 检查是否为空
119
133
  ```
120
134
 
121
135
  ### 树和映射 API
@@ -124,8 +138,8 @@ structure.isEmpty: boolean // 检查是否为空
124
138
 
125
139
  ```typescript
126
140
  // 添加/更新
127
- structure.set(key: K, value: V): this
128
- structure.setMany(entries: [K, V][]): this
141
+ structure.set(key: K, value: V): this // 返回 this 支持链式调用(Map/HashMap)
142
+ structure.setMany(entries: [K, V][]): boolean[]
129
143
 
130
144
  // 查询
131
145
  structure.get(key: K): V | undefined
@@ -134,6 +148,7 @@ structure.size: number
134
148
 
135
149
  // 删除
136
150
  structure.delete(key: K): boolean
151
+ structure.deleteWhere(pred: Function): boolean // TreeMap/TreeSet/LinkedHashMap
137
152
  structure.clear(): void
138
153
 
139
154
  // 迭代
@@ -148,19 +163,34 @@ structure.entries(): IterableIterator<[K, V]>
148
163
 
149
164
  ```typescript
150
165
  // 添加/删除
151
- heap.push(element: T): number // 添加元素
152
- heap.add(element: T): number // push 的别名
153
- heap.pop(): T | undefined // 删除最高/最低优先级
154
- heap.poll(): T | undefined // pop 的别名
166
+ heap.add(element: T): boolean // 添加元素
167
+ heap.pop(): T | undefined // 删除最高/最低优先级
168
+ heap.poll(): T | undefined // 已废弃 — 请使用 pop()
169
+ heap.delete(element: T): boolean // 删除第一个匹配
170
+ heap.deleteWhere(pred: Function): boolean // 按条件删除第一个匹配
155
171
 
156
172
  // 查看
157
173
  heap.peek(): T | undefined // 查看最高/最低优先级但不删除
158
174
 
159
175
  // 查询
160
176
  heap.size: number
161
- heap.isEmpty: boolean
177
+ heap.isEmpty(): boolean
162
178
  ```
163
179
 
180
+ ### TreeSet — ES2025 集合操作
181
+
182
+ ```typescript
183
+ treeSet.union(other: Iterable<K>): TreeSet<K> // 并集
184
+ treeSet.intersection(other: Iterable<K>): TreeSet<K> // 交集
185
+ treeSet.difference(other: Iterable<K>): TreeSet<K> // 差集
186
+ treeSet.symmetricDifference(other: Iterable<K>): TreeSet<K>// 对称差集
187
+ treeSet.isSubsetOf(other: Iterable<K>): boolean // 子集判断
188
+ treeSet.isSupersetOf(other: Iterable<K>): boolean // 超集判断
189
+ treeSet.isDisjointFrom(other: Iterable<K>): boolean // 不相交判断
190
+ ```
191
+
192
+ 接受任何 `Iterable<K>`(TreeSet、原生 Set、数组、生成器)。
193
+
164
194
  ### 数组方法(所有结构上可用)
165
195
 
166
196
  **所有结构通过迭代支持 ES6+ 数组方法:**