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
@@ -147,6 +147,13 @@ var _Matrix = class _Matrix {
147
147
 
148
148
 
149
149
 
150
+
151
+
152
+
153
+
154
+
155
+
156
+
150
157
 
151
158
 
152
159
 
@@ -215,6 +222,13 @@ var _Matrix = class _Matrix {
215
222
 
216
223
 
217
224
 
225
+
226
+
227
+
228
+
229
+
230
+
231
+
218
232
 
219
233
 
220
234
 
@@ -279,6 +293,13 @@ var _Matrix = class _Matrix {
279
293
 
280
294
 
281
295
 
296
+
297
+
298
+
299
+
300
+
301
+
302
+
282
303
 
283
304
 
284
305
 
@@ -366,6 +387,13 @@ var _Matrix = class _Matrix {
366
387
 
367
388
 
368
389
 
390
+
391
+
392
+
393
+
394
+
395
+
396
+
369
397
 
370
398
 
371
399
 
@@ -436,6 +464,13 @@ var _Matrix = class _Matrix {
436
464
 
437
465
 
438
466
 
467
+
468
+
469
+
470
+
471
+
472
+
473
+
439
474
 
440
475
 
441
476
 
@@ -527,6 +562,13 @@ var _Matrix = class _Matrix {
527
562
 
528
563
 
529
564
 
565
+
566
+
567
+
568
+
569
+
570
+
571
+
530
572
 
531
573
 
532
574
 
@@ -605,6 +647,13 @@ var _Matrix = class _Matrix {
605
647
 
606
648
 
607
649
 
650
+
651
+
652
+
653
+
654
+
655
+
656
+
608
657
 
609
658
 
610
659
 
@@ -709,6 +758,13 @@ var _Matrix = class _Matrix {
709
758
 
710
759
 
711
760
 
761
+
762
+
763
+
764
+
765
+
766
+
767
+
712
768
 
713
769
 
714
770
 
@@ -183,6 +183,35 @@ var _IterableElementBase = class _IterableElementBase {
183
183
  for (const ele of this) if (ele === element) return true;
184
184
  return false;
185
185
  }
186
+ /**
187
+ * Check whether a value exists (Array-compatible alias for `has`).
188
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
189
+ * @param element - Element to search for (uses `===`).
190
+ * @returns `true` if found.
191
+ */
192
+ includes(element) {
193
+ return this.has(element);
194
+ }
195
+ /**
196
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
197
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
198
+ */
199
+ *entries() {
200
+ let index = 0;
201
+ for (const value of this) {
202
+ yield [index++, value];
203
+ }
204
+ }
205
+ /**
206
+ * Return an iterator of numeric indices (Array-compatible).
207
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
208
+ */
209
+ *keys() {
210
+ let index = 0;
211
+ for (const _ of this) {
212
+ yield index++;
213
+ }
214
+ }
186
215
  /**
187
216
  * Reduces all elements to a single accumulated value.
188
217
  *
@@ -323,6 +352,13 @@ var _Heap = class _Heap extends IterableElementBase {
323
352
 
324
353
 
325
354
 
355
+
356
+
357
+
358
+
359
+
360
+
361
+
326
362
 
327
363
 
328
364
 
@@ -380,7 +416,7 @@ var _Heap = class _Heap extends IterableElementBase {
380
416
  }
381
417
  /**
382
418
  * Insert an element.
383
- * @remarks Time O(1) amortized, Space O(1)
419
+ * @remarks Time O(log N) amortized, Space O(1)
384
420
  * @param element - Element to insert.
385
421
  * @returns True.
386
422
 
@@ -410,6 +446,13 @@ var _Heap = class _Heap extends IterableElementBase {
410
446
 
411
447
 
412
448
 
449
+
450
+
451
+
452
+
453
+
454
+
455
+
413
456
 
414
457
 
415
458
 
@@ -467,6 +510,13 @@ var _Heap = class _Heap extends IterableElementBase {
467
510
 
468
511
 
469
512
 
513
+
514
+
515
+
516
+
517
+
518
+
519
+
470
520
 
471
521
 
472
522
 
@@ -530,7 +580,41 @@ var _Heap = class _Heap extends IterableElementBase {
530
580
 
531
581
 
532
582
 
583
+
584
+
585
+
533
586
 
587
+
588
+
589
+
590
+ * @example
591
+ * // Heap with custom comparator (MaxHeap behavior)
592
+ * interface Task {
593
+ * id: number;
594
+ * priority: number;
595
+ * name: string;
596
+ * }
597
+ *
598
+ * // Custom comparator for max heap behavior (higher priority first)
599
+ * const tasks: Task[] = [
600
+ * { id: 1, priority: 5, name: 'Email' },
601
+ * { id: 2, priority: 3, name: 'Chat' },
602
+ * { id: 3, priority: 8, name: 'Alert' }
603
+ * ];
604
+ *
605
+ * const maxHeap = new Heap(tasks, {
606
+ * comparator: (a: Task, b: Task) => b.priority - a.priority
607
+ * });
608
+ *
609
+ * console.log(maxHeap.size); // 3;
610
+ *
611
+ * // Peek returns highest priority task
612
+ * const topTask = maxHeap.peek();
613
+ * console.log(topTask?.priority); // 8;
614
+ * console.log(topTask?.name); // 'Alert';
615
+ */
616
+ /**
617
+ * @deprecated Use `pop` instead. Will be removed in a future major version.
534
618
 
535
619
 
536
620
 
@@ -561,6 +645,14 @@ var _Heap = class _Heap extends IterableElementBase {
561
645
  * console.log(topTask?.name); // 'Alert';
562
646
  */
563
647
  poll() {
648
+ return this.pop();
649
+ }
650
+ /**
651
+ * Remove and return the top element (min or max depending on comparator).
652
+ * @remarks Time O(log N) amortized, Space O(1)
653
+ * @returns The removed top element, or undefined if empty.
654
+ */
655
+ pop() {
564
656
  if (this.elements.length === 0) return;
565
657
  const value = this.elements[0];
566
658
  const last = this.elements.pop();
@@ -601,6 +693,13 @@ var _Heap = class _Heap extends IterableElementBase {
601
693
 
602
694
 
603
695
 
696
+
697
+
698
+
699
+
700
+
701
+
702
+
604
703
 
605
704
 
606
705
 
@@ -701,6 +800,13 @@ var _Heap = class _Heap extends IterableElementBase {
701
800
 
702
801
 
703
802
 
803
+
804
+
805
+
806
+
807
+
808
+
809
+
704
810
 
705
811
 
706
812
 
@@ -748,6 +854,13 @@ var _Heap = class _Heap extends IterableElementBase {
748
854
 
749
855
 
750
856
 
857
+
858
+
859
+
860
+
861
+
862
+
863
+
751
864
 
752
865
 
753
866
 
@@ -765,16 +878,6 @@ var _Heap = class _Heap extends IterableElementBase {
765
878
  clear() {
766
879
  this._elements = [];
767
880
  }
768
- /**
769
- * Replace the backing array and rebuild the heap.
770
- * @remarks Time O(N), Space O(N)
771
- * @param elements - Iterable used to refill the heap.
772
- * @returns Array of per-node results from fixing steps.
773
- */
774
- refill(elements) {
775
- this._elements = Array.from(elements);
776
- return this.fix();
777
- }
778
881
  /**
779
882
  * Check if an equal element exists in the heap.
780
883
  * @remarks Time O(N), Space O(1)
@@ -798,6 +901,13 @@ var _Heap = class _Heap extends IterableElementBase {
798
901
 
799
902
 
800
903
 
904
+
905
+
906
+
907
+
908
+
909
+
910
+
801
911
 
802
912
 
803
913
 
@@ -845,6 +955,13 @@ var _Heap = class _Heap extends IterableElementBase {
845
955
 
846
956
 
847
957
 
958
+
959
+
960
+
961
+
962
+
963
+
964
+
848
965
 
849
966
 
850
967
 
@@ -869,7 +986,7 @@ var _Heap = class _Heap extends IterableElementBase {
869
986
  }
870
987
  if (index < 0) return false;
871
988
  if (index === 0) {
872
- this.poll();
989
+ this.pop();
873
990
  } else if (index === this.elements.length - 1) {
874
991
  this.elements.pop();
875
992
  } else {
@@ -879,13 +996,19 @@ var _Heap = class _Heap extends IterableElementBase {
879
996
  }
880
997
  return true;
881
998
  }
999
+ /**
1000
+ * @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
1001
+ */
1002
+ deleteBy(predicate) {
1003
+ return this.deleteWhere(predicate);
1004
+ }
882
1005
  /**
883
1006
  * Delete the first element that matches a predicate.
884
1007
  * @remarks Time O(N), Space O(1)
885
1008
  * @param predicate - Function (element, index, heap) → boolean.
886
1009
  * @returns True if an element was removed.
887
1010
  */
888
- deleteBy(predicate) {
1011
+ deleteWhere(predicate) {
889
1012
  let idx = -1;
890
1013
  for (let i = 0; i < this.elements.length; i++) {
891
1014
  if (predicate(this.elements[i], i, this)) {
@@ -895,7 +1018,7 @@ var _Heap = class _Heap extends IterableElementBase {
895
1018
  }
896
1019
  if (idx < 0) return false;
897
1020
  if (idx === 0) {
898
- this.poll();
1021
+ this.pop();
899
1022
  } else if (idx === this.elements.length - 1) {
900
1023
  this.elements.pop();
901
1024
  } else {
@@ -938,6 +1061,13 @@ var _Heap = class _Heap extends IterableElementBase {
938
1061
 
939
1062
 
940
1063
 
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
941
1071
 
942
1072
 
943
1073
 
@@ -1018,6 +1148,13 @@ var _Heap = class _Heap extends IterableElementBase {
1018
1148
 
1019
1149
 
1020
1150
 
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1021
1158
 
1022
1159
 
1023
1160
 
@@ -1071,6 +1208,13 @@ var _Heap = class _Heap extends IterableElementBase {
1071
1208
 
1072
1209
 
1073
1210
 
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1074
1218
 
1075
1219
 
1076
1220
 
@@ -1123,6 +1267,13 @@ var _Heap = class _Heap extends IterableElementBase {
1123
1267
 
1124
1268
 
1125
1269
 
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1126
1277
 
1127
1278
 
1128
1279
 
@@ -1182,6 +1333,13 @@ var _Heap = class _Heap extends IterableElementBase {
1182
1333
 
1183
1334
 
1184
1335
 
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1185
1343
 
1186
1344
 
1187
1345