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
@@ -149,6 +149,13 @@ var Matrix = class _Matrix {
149
149
 
150
150
 
151
151
 
152
+
153
+
154
+
155
+
156
+
157
+
158
+
152
159
 
153
160
 
154
161
 
@@ -217,6 +224,13 @@ var Matrix = class _Matrix {
217
224
 
218
225
 
219
226
 
227
+
228
+
229
+
230
+
231
+
232
+
233
+
220
234
 
221
235
 
222
236
 
@@ -281,6 +295,13 @@ var Matrix = class _Matrix {
281
295
 
282
296
 
283
297
 
298
+
299
+
300
+
301
+
302
+
303
+
304
+
284
305
 
285
306
 
286
307
 
@@ -367,6 +388,13 @@ var Matrix = class _Matrix {
367
388
 
368
389
 
369
390
 
391
+
392
+
393
+
394
+
395
+
396
+
397
+
370
398
 
371
399
 
372
400
 
@@ -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
 
@@ -708,6 +757,13 @@ var Matrix = class _Matrix {
708
757
 
709
758
 
710
759
 
760
+
761
+
762
+
763
+
764
+
765
+
766
+
711
767
 
712
768
 
713
769
 
@@ -186,6 +186,35 @@ var IterableElementBase = class {
186
186
  for (const ele of this) if (ele === element) return true;
187
187
  return false;
188
188
  }
189
+ /**
190
+ * Check whether a value exists (Array-compatible alias for `has`).
191
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1).
192
+ * @param element - Element to search for (uses `===`).
193
+ * @returns `true` if found.
194
+ */
195
+ includes(element) {
196
+ return this.has(element);
197
+ }
198
+ /**
199
+ * Return an iterator of `[index, value]` pairs (Array-compatible).
200
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
201
+ */
202
+ *entries() {
203
+ let index = 0;
204
+ for (const value of this) {
205
+ yield [index++, value];
206
+ }
207
+ }
208
+ /**
209
+ * Return an iterator of numeric indices (Array-compatible).
210
+ * @remarks Provided for familiarity when migrating from Array. Time O(n), Space O(1) per step.
211
+ */
212
+ *keys() {
213
+ let index = 0;
214
+ for (const _ of this) {
215
+ yield index++;
216
+ }
217
+ }
189
218
  /**
190
219
  * Reduces all elements to a single accumulated value.
191
220
  *
@@ -318,6 +347,13 @@ var Heap = class _Heap extends IterableElementBase {
318
347
 
319
348
 
320
349
 
350
+
351
+
352
+
353
+
354
+
355
+
356
+
321
357
 
322
358
 
323
359
 
@@ -374,7 +410,7 @@ var Heap = class _Heap extends IterableElementBase {
374
410
  }
375
411
  /**
376
412
  * Insert an element.
377
- * @remarks Time O(1) amortized, Space O(1)
413
+ * @remarks Time O(log N) amortized, Space O(1)
378
414
  * @param element - Element to insert.
379
415
  * @returns True.
380
416
 
@@ -404,6 +440,13 @@ var Heap = class _Heap extends IterableElementBase {
404
440
 
405
441
 
406
442
 
443
+
444
+
445
+
446
+
447
+
448
+
449
+
407
450
 
408
451
 
409
452
 
@@ -461,6 +504,13 @@ var Heap = class _Heap extends IterableElementBase {
461
504
 
462
505
 
463
506
 
507
+
508
+
509
+
510
+
511
+
512
+
513
+
464
514
 
465
515
 
466
516
 
@@ -524,7 +574,41 @@ var Heap = class _Heap extends IterableElementBase {
524
574
 
525
575
 
526
576
 
577
+
578
+
579
+
527
580
 
581
+
582
+
583
+
584
+ * @example
585
+ * // Heap with custom comparator (MaxHeap behavior)
586
+ * interface Task {
587
+ * id: number;
588
+ * priority: number;
589
+ * name: string;
590
+ * }
591
+ *
592
+ * // Custom comparator for max heap behavior (higher priority first)
593
+ * const tasks: Task[] = [
594
+ * { id: 1, priority: 5, name: 'Email' },
595
+ * { id: 2, priority: 3, name: 'Chat' },
596
+ * { id: 3, priority: 8, name: 'Alert' }
597
+ * ];
598
+ *
599
+ * const maxHeap = new Heap(tasks, {
600
+ * comparator: (a: Task, b: Task) => b.priority - a.priority
601
+ * });
602
+ *
603
+ * console.log(maxHeap.size); // 3;
604
+ *
605
+ * // Peek returns highest priority task
606
+ * const topTask = maxHeap.peek();
607
+ * console.log(topTask?.priority); // 8;
608
+ * console.log(topTask?.name); // 'Alert';
609
+ */
610
+ /**
611
+ * @deprecated Use `pop` instead. Will be removed in a future major version.
528
612
 
529
613
 
530
614
 
@@ -555,6 +639,14 @@ var Heap = class _Heap extends IterableElementBase {
555
639
  * console.log(topTask?.name); // 'Alert';
556
640
  */
557
641
  poll() {
642
+ return this.pop();
643
+ }
644
+ /**
645
+ * Remove and return the top element (min or max depending on comparator).
646
+ * @remarks Time O(log N) amortized, Space O(1)
647
+ * @returns The removed top element, or undefined if empty.
648
+ */
649
+ pop() {
558
650
  if (this.elements.length === 0) return;
559
651
  const value = this.elements[0];
560
652
  const last = this.elements.pop();
@@ -595,6 +687,13 @@ var Heap = class _Heap extends IterableElementBase {
595
687
 
596
688
 
597
689
 
690
+
691
+
692
+
693
+
694
+
695
+
696
+
598
697
 
599
698
 
600
699
 
@@ -695,6 +794,13 @@ var Heap = class _Heap extends IterableElementBase {
695
794
 
696
795
 
697
796
 
797
+
798
+
799
+
800
+
801
+
802
+
803
+
698
804
 
699
805
 
700
806
 
@@ -742,6 +848,13 @@ var Heap = class _Heap extends IterableElementBase {
742
848
 
743
849
 
744
850
 
851
+
852
+
853
+
854
+
855
+
856
+
857
+
745
858
 
746
859
 
747
860
 
@@ -759,16 +872,6 @@ var Heap = class _Heap extends IterableElementBase {
759
872
  clear() {
760
873
  this._elements = [];
761
874
  }
762
- /**
763
- * Replace the backing array and rebuild the heap.
764
- * @remarks Time O(N), Space O(N)
765
- * @param elements - Iterable used to refill the heap.
766
- * @returns Array of per-node results from fixing steps.
767
- */
768
- refill(elements) {
769
- this._elements = Array.from(elements);
770
- return this.fix();
771
- }
772
875
  /**
773
876
  * Check if an equal element exists in the heap.
774
877
  * @remarks Time O(N), Space O(1)
@@ -792,6 +895,13 @@ var Heap = class _Heap extends IterableElementBase {
792
895
 
793
896
 
794
897
 
898
+
899
+
900
+
901
+
902
+
903
+
904
+
795
905
 
796
906
 
797
907
 
@@ -839,6 +949,13 @@ var Heap = class _Heap extends IterableElementBase {
839
949
 
840
950
 
841
951
 
952
+
953
+
954
+
955
+
956
+
957
+
958
+
842
959
 
843
960
 
844
961
 
@@ -863,7 +980,7 @@ var Heap = class _Heap extends IterableElementBase {
863
980
  }
864
981
  if (index < 0) return false;
865
982
  if (index === 0) {
866
- this.poll();
983
+ this.pop();
867
984
  } else if (index === this.elements.length - 1) {
868
985
  this.elements.pop();
869
986
  } else {
@@ -873,13 +990,19 @@ var Heap = class _Heap extends IterableElementBase {
873
990
  }
874
991
  return true;
875
992
  }
993
+ /**
994
+ * @deprecated Use `deleteWhere` instead. Will be removed in a future major version.
995
+ */
996
+ deleteBy(predicate) {
997
+ return this.deleteWhere(predicate);
998
+ }
876
999
  /**
877
1000
  * Delete the first element that matches a predicate.
878
1001
  * @remarks Time O(N), Space O(1)
879
1002
  * @param predicate - Function (element, index, heap) → boolean.
880
1003
  * @returns True if an element was removed.
881
1004
  */
882
- deleteBy(predicate) {
1005
+ deleteWhere(predicate) {
883
1006
  let idx = -1;
884
1007
  for (let i = 0; i < this.elements.length; i++) {
885
1008
  if (predicate(this.elements[i], i, this)) {
@@ -889,7 +1012,7 @@ var Heap = class _Heap extends IterableElementBase {
889
1012
  }
890
1013
  if (idx < 0) return false;
891
1014
  if (idx === 0) {
892
- this.poll();
1015
+ this.pop();
893
1016
  } else if (idx === this.elements.length - 1) {
894
1017
  this.elements.pop();
895
1018
  } else {
@@ -932,6 +1055,13 @@ var Heap = class _Heap extends IterableElementBase {
932
1055
 
933
1056
 
934
1057
 
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
935
1065
 
936
1066
 
937
1067
 
@@ -1012,6 +1142,13 @@ var Heap = class _Heap extends IterableElementBase {
1012
1142
 
1013
1143
 
1014
1144
 
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1015
1152
 
1016
1153
 
1017
1154
 
@@ -1065,6 +1202,13 @@ var Heap = class _Heap extends IterableElementBase {
1065
1202
 
1066
1203
 
1067
1204
 
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1068
1212
 
1069
1213
 
1070
1214
 
@@ -1117,6 +1261,13 @@ var Heap = class _Heap extends IterableElementBase {
1117
1261
 
1118
1262
 
1119
1263
 
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1120
1271
 
1121
1272
 
1122
1273
 
@@ -1176,6 +1327,13 @@ var Heap = class _Heap extends IterableElementBase {
1176
1327
 
1177
1328
 
1178
1329
 
1330
+
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1179
1337
 
1180
1338
 
1181
1339