data-structure-typed 1.51.9 → 1.52.1

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 (206) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +141 -54
  3. package/benchmark/report.html +37 -1
  4. package/benchmark/report.json +385 -13
  5. package/dist/cjs/data-structures/base/index.d.ts +2 -1
  6. package/dist/cjs/data-structures/base/index.js +2 -1
  7. package/dist/cjs/data-structures/base/index.js.map +1 -1
  8. package/dist/cjs/data-structures/base/iterable-element-base.d.ts +171 -0
  9. package/dist/cjs/data-structures/base/iterable-element-base.js +226 -0
  10. package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -0
  11. package/dist/cjs/data-structures/base/{iterable-base.d.ts → iterable-entry-base.d.ts} +4 -147
  12. package/dist/cjs/data-structures/base/{iterable-base.js → iterable-entry-base.js} +13 -190
  13. package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -0
  14. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +13 -13
  15. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -6
  16. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +13 -13
  18. package/dist/cjs/data-structures/binary-tree/avl-tree.js +6 -6
  19. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +99 -99
  21. package/dist/cjs/data-structures/binary-tree/binary-tree.js +54 -52
  22. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  23. package/dist/cjs/data-structures/binary-tree/bst.d.ts +37 -45
  24. package/dist/cjs/data-structures/binary-tree/bst.js +17 -25
  25. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  26. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +10 -10
  27. package/dist/cjs/data-structures/binary-tree/rb-tree.js +6 -6
  28. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  29. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  30. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +5 -5
  31. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  32. package/dist/cjs/data-structures/graph/directed-graph.js +2 -1
  33. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  34. package/dist/cjs/data-structures/hash/hash-map.d.ts +2 -2
  35. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  36. package/dist/cjs/data-structures/heap/heap.d.ts +43 -114
  37. package/dist/cjs/data-structures/heap/heap.js +59 -127
  38. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  39. package/dist/cjs/data-structures/heap/max-heap.d.ts +50 -4
  40. package/dist/cjs/data-structures/heap/max-heap.js +76 -10
  41. package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
  42. package/dist/cjs/data-structures/heap/min-heap.d.ts +51 -5
  43. package/dist/cjs/data-structures/heap/min-heap.js +68 -11
  44. package/dist/cjs/data-structures/heap/min-heap.js.map +1 -1
  45. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +22 -28
  46. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +26 -28
  47. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  48. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +22 -25
  49. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +29 -26
  50. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  51. package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +50 -4
  52. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +79 -10
  53. package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  54. package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +51 -5
  55. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +71 -11
  56. package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  57. package/dist/cjs/data-structures/priority-queue/priority-queue.d.ts +50 -4
  58. package/dist/cjs/data-structures/priority-queue/priority-queue.js +70 -1
  59. package/dist/cjs/data-structures/priority-queue/priority-queue.js.map +1 -1
  60. package/dist/cjs/data-structures/queue/deque.d.ts +27 -18
  61. package/dist/cjs/data-structures/queue/deque.js +43 -21
  62. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  63. package/dist/cjs/data-structures/queue/queue.d.ts +8 -29
  64. package/dist/cjs/data-structures/queue/queue.js +15 -32
  65. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  66. package/dist/cjs/data-structures/stack/stack.d.ts +17 -22
  67. package/dist/cjs/data-structures/stack/stack.js +25 -24
  68. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  69. package/dist/cjs/data-structures/trie/trie.d.ts +18 -13
  70. package/dist/cjs/data-structures/trie/trie.js +26 -15
  71. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  72. package/dist/cjs/interfaces/binary-tree.d.ts +4 -4
  73. package/dist/cjs/types/common.d.ts +1 -22
  74. package/dist/cjs/types/data-structures/base/base.d.ts +5 -2
  75. package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
  76. package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
  77. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +20 -4
  78. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +5 -3
  79. package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -3
  80. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -3
  81. package/dist/cjs/types/data-structures/heap/heap.d.ts +3 -2
  82. package/dist/cjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -1
  83. package/dist/cjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -1
  84. package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  85. package/dist/cjs/types/data-structures/queue/deque.d.ts +4 -2
  86. package/dist/cjs/types/data-structures/queue/queue.d.ts +2 -1
  87. package/dist/cjs/types/data-structures/stack/stack.d.ts +2 -1
  88. package/dist/cjs/types/data-structures/trie/trie.d.ts +3 -2
  89. package/dist/cjs/utils/number.js +1 -2
  90. package/dist/cjs/utils/number.js.map +1 -1
  91. package/dist/cjs/utils/utils.js +2 -2
  92. package/dist/cjs/utils/utils.js.map +1 -1
  93. package/dist/mjs/data-structures/base/index.d.ts +2 -1
  94. package/dist/mjs/data-structures/base/index.js +2 -1
  95. package/dist/mjs/data-structures/base/iterable-element-base.d.ts +171 -0
  96. package/dist/mjs/data-structures/base/iterable-element-base.js +222 -0
  97. package/dist/mjs/data-structures/base/{iterable-base.d.ts → iterable-entry-base.d.ts} +4 -147
  98. package/dist/mjs/data-structures/base/{iterable-base.js → iterable-entry-base.js} +10 -186
  99. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +13 -13
  100. package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +6 -6
  101. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +13 -13
  102. package/dist/mjs/data-structures/binary-tree/avl-tree.js +6 -6
  103. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +99 -99
  104. package/dist/mjs/data-structures/binary-tree/binary-tree.js +54 -52
  105. package/dist/mjs/data-structures/binary-tree/bst.d.ts +37 -45
  106. package/dist/mjs/data-structures/binary-tree/bst.js +17 -25
  107. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +10 -10
  108. package/dist/mjs/data-structures/binary-tree/rb-tree.js +6 -6
  109. package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  110. package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +5 -5
  111. package/dist/mjs/data-structures/graph/directed-graph.js +2 -1
  112. package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
  113. package/dist/mjs/data-structures/heap/heap.d.ts +43 -114
  114. package/dist/mjs/data-structures/heap/heap.js +60 -128
  115. package/dist/mjs/data-structures/heap/max-heap.d.ts +50 -4
  116. package/dist/mjs/data-structures/heap/max-heap.js +79 -10
  117. package/dist/mjs/data-structures/heap/min-heap.d.ts +51 -5
  118. package/dist/mjs/data-structures/heap/min-heap.js +68 -11
  119. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +22 -28
  120. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +26 -28
  121. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +22 -25
  122. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +29 -26
  123. package/dist/mjs/data-structures/priority-queue/max-priority-queue.d.ts +50 -4
  124. package/dist/mjs/data-structures/priority-queue/max-priority-queue.js +82 -10
  125. package/dist/mjs/data-structures/priority-queue/min-priority-queue.d.ts +51 -5
  126. package/dist/mjs/data-structures/priority-queue/min-priority-queue.js +71 -11
  127. package/dist/mjs/data-structures/priority-queue/priority-queue.d.ts +50 -4
  128. package/dist/mjs/data-structures/priority-queue/priority-queue.js +70 -1
  129. package/dist/mjs/data-structures/queue/deque.d.ts +27 -18
  130. package/dist/mjs/data-structures/queue/deque.js +43 -21
  131. package/dist/mjs/data-structures/queue/queue.d.ts +8 -29
  132. package/dist/mjs/data-structures/queue/queue.js +15 -32
  133. package/dist/mjs/data-structures/stack/stack.d.ts +17 -22
  134. package/dist/mjs/data-structures/stack/stack.js +25 -24
  135. package/dist/mjs/data-structures/trie/trie.d.ts +18 -13
  136. package/dist/mjs/data-structures/trie/trie.js +26 -15
  137. package/dist/mjs/interfaces/binary-tree.d.ts +4 -4
  138. package/dist/mjs/types/common.d.ts +1 -22
  139. package/dist/mjs/types/data-structures/base/base.d.ts +5 -2
  140. package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -3
  141. package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +2 -3
  142. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +20 -4
  143. package/dist/mjs/types/data-structures/binary-tree/bst.d.ts +5 -3
  144. package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +2 -3
  145. package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -3
  146. package/dist/mjs/types/data-structures/heap/heap.d.ts +3 -2
  147. package/dist/mjs/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -1
  148. package/dist/mjs/types/data-structures/linked-list/singly-linked-list.d.ts +2 -1
  149. package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  150. package/dist/mjs/types/data-structures/queue/deque.d.ts +4 -2
  151. package/dist/mjs/types/data-structures/queue/queue.d.ts +2 -1
  152. package/dist/mjs/types/data-structures/stack/stack.d.ts +2 -1
  153. package/dist/mjs/types/data-structures/trie/trie.d.ts +3 -2
  154. package/dist/umd/data-structure-typed.js +732 -409
  155. package/dist/umd/data-structure-typed.min.js +2 -2
  156. package/dist/umd/data-structure-typed.min.js.map +1 -1
  157. package/package.json +7 -7
  158. package/src/data-structures/base/index.ts +2 -1
  159. package/src/data-structures/base/iterable-element-base.ts +250 -0
  160. package/src/data-structures/base/{iterable-base.ts → iterable-entry-base.ts} +22 -213
  161. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +14 -15
  162. package/src/data-structures/binary-tree/avl-tree.ts +13 -14
  163. package/src/data-structures/binary-tree/binary-tree.ts +156 -152
  164. package/src/data-structures/binary-tree/bst.ts +52 -60
  165. package/src/data-structures/binary-tree/rb-tree.ts +12 -13
  166. package/src/data-structures/binary-tree/tree-multi-map.ts +12 -13
  167. package/src/data-structures/graph/directed-graph.ts +2 -1
  168. package/src/data-structures/hash/hash-map.ts +4 -4
  169. package/src/data-structures/heap/heap.ts +71 -152
  170. package/src/data-structures/heap/max-heap.ts +88 -13
  171. package/src/data-structures/heap/min-heap.ts +78 -15
  172. package/src/data-structures/linked-list/doubly-linked-list.ts +32 -32
  173. package/src/data-structures/linked-list/singly-linked-list.ts +37 -29
  174. package/src/data-structures/priority-queue/max-priority-queue.ts +94 -13
  175. package/src/data-structures/priority-queue/min-priority-queue.ts +84 -15
  176. package/src/data-structures/priority-queue/priority-queue.ts +81 -4
  177. package/src/data-structures/queue/deque.ts +50 -25
  178. package/src/data-structures/queue/queue.ts +23 -37
  179. package/src/data-structures/stack/stack.ts +31 -26
  180. package/src/data-structures/trie/trie.ts +33 -18
  181. package/src/interfaces/binary-tree.ts +4 -5
  182. package/src/types/common.ts +2 -24
  183. package/src/types/data-structures/base/base.ts +14 -6
  184. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +2 -3
  185. package/src/types/data-structures/binary-tree/avl-tree.ts +2 -3
  186. package/src/types/data-structures/binary-tree/binary-tree.ts +24 -5
  187. package/src/types/data-structures/binary-tree/bst.ts +9 -3
  188. package/src/types/data-structures/binary-tree/rb-tree.ts +2 -3
  189. package/src/types/data-structures/binary-tree/tree-multi-map.ts +2 -3
  190. package/src/types/data-structures/heap/heap.ts +4 -1
  191. package/src/types/data-structures/linked-list/doubly-linked-list.ts +3 -1
  192. package/src/types/data-structures/linked-list/singly-linked-list.ts +3 -1
  193. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -1
  194. package/src/types/data-structures/queue/deque.ts +6 -1
  195. package/src/types/data-structures/queue/queue.ts +3 -1
  196. package/src/types/data-structures/stack/stack.ts +3 -1
  197. package/src/types/data-structures/trie/trie.ts +3 -1
  198. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +1 -1
  199. package/test/unit/data-structures/graph/directed-graph.test.ts +28 -0
  200. package/test/unit/data-structures/heap/heap.test.ts +100 -0
  201. package/test/unit/data-structures/heap/max-heap.test.ts +44 -1
  202. package/test/unit/data-structures/heap/min-heap.test.ts +18 -1
  203. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +42 -0
  204. package/test/unit/data-structures/queue/deque.test.ts +49 -0
  205. package/test/unit/data-structures/queue/queue.test.ts +56 -0
  206. package/dist/cjs/data-structures/base/iterable-base.js.map +0 -1
@@ -13,14 +13,13 @@ import type {
13
13
  BinaryTreeDeleteResult,
14
14
  BSTNKeyOrNode,
15
15
  BTNCallback,
16
- Comparable,
17
- KeyOrNodeOrEntry
16
+ BTNKeyOrNodeOrEntry
18
17
  } from '../../types';
19
18
  import { BTNEntry } from '../../types';
20
19
  import { IBinaryTree } from '../../interfaces';
21
20
 
22
21
  export class AVLTreeNode<
23
- K extends Comparable,
22
+ K = any,
24
23
  V = any,
25
24
  NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNodeNested<K, V>
26
25
  > extends BSTNode<K, V, NODE> {
@@ -67,7 +66,7 @@ export class AVLTreeNode<
67
66
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
68
67
  */
69
68
  export class AVLTree<
70
- K extends Comparable,
69
+ K = any,
71
70
  V = any,
72
71
  R = BTNEntry<K, V>,
73
72
  NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNode<K, V, AVLTreeNodeNested<K, V>>,
@@ -87,7 +86,7 @@ export class AVLTree<
87
86
  * `nodeBuilder` (
88
87
  */
89
88
  constructor(
90
- keysOrNodesOrEntriesOrRawElements: Iterable<R | KeyOrNodeOrEntry<K, V, NODE>> = [],
89
+ keysOrNodesOrEntriesOrRawElements: Iterable<R | BTNKeyOrNodeOrEntry<K, V, NODE>> = [],
91
90
  options?: AVLTreeOptions<K, V, R>
92
91
  ) {
93
92
  super([], options);
@@ -124,13 +123,13 @@ export class AVLTree<
124
123
 
125
124
  /**
126
125
  * The function checks if the input is an instance of AVLTreeNode.
127
- * @param {R | KeyOrNodeOrEntry<K, V, NODE>} keyOrNodeOrEntryOrRawElement - The parameter
128
- * `keyOrNodeOrEntryOrRawElement` can be of type `R` or `KeyOrNodeOrEntry<K, V, NODE>`.
126
+ * @param {R | BTNKeyOrNodeOrEntry<K, V, NODE>} keyOrNodeOrEntryOrRawElement - The parameter
127
+ * `keyOrNodeOrEntryOrRawElement` can be of type `R` or `BTNKeyOrNodeOrEntry<K, V, NODE>`.
129
128
  * @returns a boolean value indicating whether the input parameter `keyOrNodeOrEntryOrRawElement` is
130
129
  * an instance of the `AVLTreeNode` class.
131
130
  */
132
131
  override isNode(
133
- keyOrNodeOrEntryOrRawElement: R | KeyOrNodeOrEntry<K, V, NODE>
132
+ keyOrNodeOrEntryOrRawElement: R | BTNKeyOrNodeOrEntry<K, V, NODE>
134
133
  ): keyOrNodeOrEntryOrRawElement is NODE {
135
134
  return keyOrNodeOrEntryOrRawElement instanceof AVLTreeNode;
136
135
  }
@@ -147,14 +146,14 @@ export class AVLTree<
147
146
  *
148
147
  * The function overrides the add method of a class and inserts a key-value pair into a data
149
148
  * structure, then balances the path.
150
- * @param {R | KeyOrNodeOrEntry<K, V, NODE>} keyOrNodeOrEntryOrRawElement - The parameter
151
- * `keyOrNodeOrEntryOrRawElement` can accept values of type `R`, `KeyOrNodeOrEntry<K, V, NODE>`, or
149
+ * @param {R | BTNKeyOrNodeOrEntry<K, V, NODE>} keyOrNodeOrEntryOrRawElement - The parameter
150
+ * `keyOrNodeOrEntryOrRawElement` can accept values of type `R`, `BTNKeyOrNodeOrEntry<K, V, NODE>`, or
152
151
  * `RawElement`.
153
152
  * @param {V} [value] - The `value` parameter is an optional value that you want to associate with
154
153
  * the key or node being added to the data structure.
155
154
  * @returns The method is returning a boolean value.
156
155
  */
157
- override add(keyOrNodeOrEntryOrRawElement: R | KeyOrNodeOrEntry<K, V, NODE>, value?: V): boolean {
156
+ override add(keyOrNodeOrEntryOrRawElement: R | BTNKeyOrNodeOrEntry<K, V, NODE>, value?: V): boolean {
158
157
  if (keyOrNodeOrEntryOrRawElement === null) return false;
159
158
  const inserted = super.add(keyOrNodeOrEntryOrRawElement, value);
160
159
  if (inserted) this._balancePath(keyOrNodeOrEntryOrRawElement);
@@ -489,10 +488,10 @@ export class AVLTree<
489
488
  *
490
489
  * The `_balancePath` function is used to update the heights of nodes and perform rotation operations
491
490
  * to restore balance in an AVL tree after inserting a node.
492
- * @param {R | KeyOrNodeOrEntry<K, V, NODE>} node - The `node` parameter can be of type `R` or
493
- * `KeyOrNodeOrEntry<K, V, NODE>`.
491
+ * @param {R | BTNKeyOrNodeOrEntry<K, V, NODE>} node - The `node` parameter can be of type `R` or
492
+ * `BTNKeyOrNodeOrEntry<K, V, NODE>`.
494
493
  */
495
- protected _balancePath(node: R | KeyOrNodeOrEntry<K, V, NODE>): void {
494
+ protected _balancePath(node: R | BTNKeyOrNodeOrEntry<K, V, NODE>): void {
496
495
  node = this.ensureNode(node);
497
496
  const path = this.getPathToRoot(node, false); // first O(log n) + O(log n)
498
497
  for (let i = 0; i < path.length; i++) {