data-structure-typed 1.35.0 → 1.36.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 (203) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/CHANGELOG.md +8 -1
  3. package/CONTRIBUTING.md +18 -0
  4. package/dist/data-structures/binary-tree/aa-tree.d.ts +2 -0
  5. package/dist/data-structures/binary-tree/abstract-binary-tree.d.ts +527 -0
  6. package/dist/data-structures/binary-tree/abstract-binary-tree.js +323 -0
  7. package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -1
  8. package/dist/data-structures/binary-tree/avl-tree.d.ts +94 -0
  9. package/dist/data-structures/binary-tree/avl-tree.js +90 -3
  10. package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/data-structures/binary-tree/b-tree.d.ts +2 -0
  12. package/dist/data-structures/binary-tree/binary-indexed-tree.d.ts +46 -0
  13. package/dist/data-structures/binary-tree/binary-indexed-tree.js +36 -0
  14. package/dist/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
  15. package/dist/data-structures/binary-tree/binary-tree.d.ts +31 -0
  16. package/dist/data-structures/binary-tree/binary-tree.js +21 -0
  17. package/dist/data-structures/binary-tree/binary-tree.js.map +1 -1
  18. package/dist/data-structures/binary-tree/bst.d.ts +133 -0
  19. package/dist/data-structures/binary-tree/bst.js +114 -0
  20. package/dist/data-structures/binary-tree/bst.js.map +1 -1
  21. package/dist/data-structures/binary-tree/index.d.ts +12 -0
  22. package/dist/data-structures/binary-tree/rb-tree.d.ts +13 -0
  23. package/dist/data-structures/binary-tree/segment-tree.d.ts +83 -0
  24. package/dist/data-structures/binary-tree/segment-tree.js +45 -0
  25. package/dist/data-structures/binary-tree/segment-tree.js.map +1 -1
  26. package/dist/data-structures/binary-tree/splay-tree.d.ts +2 -0
  27. package/dist/data-structures/binary-tree/tree-multiset.d.ts +209 -0
  28. package/dist/data-structures/binary-tree/tree-multiset.js +178 -0
  29. package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -1
  30. package/dist/data-structures/binary-tree/two-three-tree.d.ts +2 -0
  31. package/dist/data-structures/graph/abstract-graph.d.ts +332 -0
  32. package/dist/data-structures/graph/abstract-graph.js +270 -7
  33. package/dist/data-structures/graph/abstract-graph.js.map +1 -1
  34. package/dist/data-structures/graph/directed-graph.d.ts +200 -0
  35. package/dist/data-structures/graph/directed-graph.js +167 -0
  36. package/dist/data-structures/graph/directed-graph.js.map +1 -1
  37. package/dist/data-structures/graph/index.d.ts +4 -0
  38. package/dist/data-structures/graph/map-graph.d.ts +79 -0
  39. package/dist/data-structures/graph/map-graph.js +54 -0
  40. package/dist/data-structures/graph/map-graph.js.map +1 -1
  41. package/dist/data-structures/graph/undirected-graph.d.ts +127 -0
  42. package/dist/data-structures/graph/undirected-graph.js +105 -0
  43. package/dist/data-structures/graph/undirected-graph.js.map +1 -1
  44. package/dist/data-structures/hash/coordinate-map.d.ts +45 -0
  45. package/dist/data-structures/hash/coordinate-map.js +35 -0
  46. package/dist/data-structures/hash/coordinate-map.js.map +1 -1
  47. package/dist/data-structures/hash/coordinate-set.d.ts +37 -0
  48. package/dist/data-structures/hash/coordinate-set.js +28 -0
  49. package/dist/data-structures/hash/coordinate-set.js.map +1 -1
  50. package/dist/data-structures/hash/hash-map.d.ts +56 -0
  51. package/dist/data-structures/hash/hash-map.js +29 -1
  52. package/dist/data-structures/hash/hash-map.js.map +1 -1
  53. package/dist/data-structures/hash/hash-table.d.ts +106 -0
  54. package/dist/data-structures/hash/hash-table.js +88 -6
  55. package/dist/data-structures/hash/hash-table.js.map +1 -1
  56. package/dist/data-structures/hash/index.d.ts +7 -0
  57. package/dist/data-structures/hash/pair.d.ts +2 -0
  58. package/dist/data-structures/hash/tree-map.d.ts +2 -0
  59. package/dist/data-structures/hash/tree-set.d.ts +2 -0
  60. package/dist/data-structures/heap/heap.d.ts +100 -0
  61. package/dist/data-structures/heap/heap.js +215 -76
  62. package/dist/data-structures/heap/heap.js.map +1 -1
  63. package/dist/data-structures/heap/index.d.ts +3 -0
  64. package/dist/data-structures/heap/max-heap.d.ts +12 -0
  65. package/dist/data-structures/heap/max-heap.js +16 -6
  66. package/dist/data-structures/heap/max-heap.js.map +1 -1
  67. package/dist/data-structures/heap/min-heap.d.ts +12 -0
  68. package/dist/data-structures/heap/min-heap.js +16 -6
  69. package/dist/data-structures/heap/min-heap.js.map +1 -1
  70. package/dist/data-structures/index.d.ts +11 -0
  71. package/dist/data-structures/linked-list/doubly-linked-list.d.ts +234 -0
  72. package/dist/data-structures/linked-list/doubly-linked-list.js +202 -0
  73. package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  74. package/dist/data-structures/linked-list/index.d.ts +3 -0
  75. package/dist/data-structures/linked-list/singly-linked-list.d.ts +157 -0
  76. package/dist/data-structures/linked-list/singly-linked-list.js +135 -0
  77. package/dist/data-structures/linked-list/singly-linked-list.js.map +1 -1
  78. package/dist/data-structures/linked-list/skip-linked-list.d.ts +61 -0
  79. package/dist/data-structures/linked-list/skip-linked-list.js +36 -0
  80. package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -1
  81. package/dist/data-structures/matrix/index.d.ts +4 -0
  82. package/dist/data-structures/matrix/matrix.d.ts +21 -0
  83. package/dist/data-structures/matrix/matrix.js +15 -0
  84. package/dist/data-structures/matrix/matrix.js.map +1 -1
  85. package/dist/data-structures/matrix/matrix2d.d.ts +108 -0
  86. package/dist/data-structures/matrix/matrix2d.js +91 -2
  87. package/dist/data-structures/matrix/matrix2d.js.map +1 -1
  88. package/dist/data-structures/matrix/navigator.d.ts +52 -0
  89. package/dist/data-structures/matrix/navigator.js +28 -0
  90. package/dist/data-structures/matrix/navigator.js.map +1 -1
  91. package/dist/data-structures/matrix/vector2d.d.ts +201 -0
  92. package/dist/data-structures/matrix/vector2d.js +188 -1
  93. package/dist/data-structures/matrix/vector2d.js.map +1 -1
  94. package/dist/data-structures/priority-queue/index.d.ts +3 -0
  95. package/dist/data-structures/priority-queue/max-priority-queue.d.ts +12 -0
  96. package/dist/data-structures/priority-queue/max-priority-queue.js +16 -17
  97. package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -1
  98. package/dist/data-structures/priority-queue/min-priority-queue.d.ts +12 -0
  99. package/dist/data-structures/priority-queue/min-priority-queue.js +16 -17
  100. package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -1
  101. package/dist/data-structures/priority-queue/priority-queue.d.ts +12 -0
  102. package/dist/data-structures/priority-queue/priority-queue.js +11 -174
  103. package/dist/data-structures/priority-queue/priority-queue.js.map +1 -1
  104. package/dist/data-structures/queue/deque.d.ts +165 -0
  105. package/dist/data-structures/queue/deque.js +124 -0
  106. package/dist/data-structures/queue/deque.js.map +1 -1
  107. package/dist/data-structures/queue/index.d.ts +2 -0
  108. package/dist/data-structures/queue/queue.d.ts +107 -0
  109. package/dist/data-structures/queue/queue.js +80 -0
  110. package/dist/data-structures/queue/queue.js.map +1 -1
  111. package/dist/data-structures/stack/index.d.ts +1 -0
  112. package/dist/data-structures/stack/stack.d.ts +63 -0
  113. package/dist/data-structures/stack/stack.js +50 -0
  114. package/dist/data-structures/stack/stack.js.map +1 -1
  115. package/dist/data-structures/tree/index.d.ts +1 -0
  116. package/dist/data-structures/tree/tree.d.ts +14 -0
  117. package/dist/data-structures/tree/tree.js +1 -0
  118. package/dist/data-structures/tree/tree.js.map +1 -1
  119. package/dist/data-structures/trie/index.d.ts +1 -0
  120. package/dist/data-structures/trie/trie.d.ts +61 -0
  121. package/dist/data-structures/trie/trie.js +36 -0
  122. package/dist/data-structures/trie/trie.js.map +1 -1
  123. package/dist/index.d.ts +4 -0
  124. package/dist/interfaces/abstract-binary-tree.d.ts +7 -0
  125. package/dist/interfaces/abstract-graph.d.ts +5 -0
  126. package/dist/interfaces/avl-tree.d.ts +7 -0
  127. package/dist/interfaces/binary-tree.d.ts +6 -0
  128. package/dist/interfaces/bst.d.ts +6 -0
  129. package/dist/interfaces/directed-graph.d.ts +3 -0
  130. package/dist/interfaces/doubly-linked-list.d.ts +1 -0
  131. package/dist/interfaces/heap.d.ts +1 -0
  132. package/dist/interfaces/index.d.ts +15 -0
  133. package/dist/interfaces/navigator.d.ts +1 -0
  134. package/dist/interfaces/priority-queue.d.ts +1 -0
  135. package/dist/interfaces/rb-tree.d.ts +6 -0
  136. package/dist/interfaces/segment-tree.d.ts +1 -0
  137. package/dist/interfaces/singly-linked-list.d.ts +1 -0
  138. package/dist/interfaces/tree-multiset.d.ts +6 -0
  139. package/dist/interfaces/undirected-graph.d.ts +3 -0
  140. package/dist/types/data-structures/abstract-binary-tree.d.ts +34 -0
  141. package/dist/types/data-structures/abstract-binary-tree.js +6 -0
  142. package/dist/types/data-structures/abstract-binary-tree.js.map +1 -1
  143. package/dist/types/data-structures/abstract-graph.d.ts +11 -0
  144. package/dist/types/data-structures/avl-tree.d.ts +4 -0
  145. package/dist/types/data-structures/binary-tree.d.ts +4 -0
  146. package/dist/types/data-structures/bst.d.ts +13 -0
  147. package/dist/types/data-structures/directed-graph.d.ts +6 -0
  148. package/dist/types/data-structures/doubly-linked-list.d.ts +1 -0
  149. package/dist/types/data-structures/hash.d.ts +1 -0
  150. package/dist/types/data-structures/heap.d.ts +1 -0
  151. package/dist/types/data-structures/index.d.ts +16 -0
  152. package/dist/types/data-structures/map-graph.d.ts +1 -0
  153. package/dist/types/data-structures/navigator.d.ts +14 -0
  154. package/dist/types/data-structures/priority-queue.d.ts +7 -0
  155. package/dist/types/data-structures/rb-tree.d.ts +8 -0
  156. package/dist/types/data-structures/segment-tree.d.ts +1 -0
  157. package/dist/types/data-structures/singly-linked-list.d.ts +1 -0
  158. package/dist/types/data-structures/tree-multiset.d.ts +4 -0
  159. package/dist/types/helpers.d.ts +1 -0
  160. package/dist/types/index.d.ts +3 -0
  161. package/dist/types/utils/index.d.ts +2 -0
  162. package/dist/types/utils/utils.d.ts +7 -0
  163. package/dist/types/utils/validate-type.d.ts +19 -0
  164. package/dist/utils/index.d.ts +1 -0
  165. package/dist/utils/utils.d.ts +19 -0
  166. package/lib/data-structures/graph/abstract-graph.js +3 -5
  167. package/lib/data-structures/heap/heap.d.ts +85 -68
  168. package/lib/data-structures/heap/heap.js +186 -108
  169. package/lib/data-structures/heap/max-heap.d.ts +6 -17
  170. package/lib/data-structures/heap/max-heap.js +11 -17
  171. package/lib/data-structures/heap/min-heap.d.ts +6 -18
  172. package/lib/data-structures/heap/min-heap.js +11 -18
  173. package/lib/data-structures/priority-queue/max-priority-queue.d.ts +5 -8
  174. package/lib/data-structures/priority-queue/max-priority-queue.js +11 -30
  175. package/lib/data-structures/priority-queue/min-priority-queue.d.ts +5 -8
  176. package/lib/data-structures/priority-queue/min-priority-queue.js +11 -31
  177. package/lib/data-structures/priority-queue/priority-queue.d.ts +6 -174
  178. package/lib/data-structures/priority-queue/priority-queue.js +11 -315
  179. package/lib/types/data-structures/heap.d.ts +1 -3
  180. package/package.json +11 -7
  181. package/src/data-structures/graph/abstract-graph.ts +3 -5
  182. package/src/data-structures/heap/heap.ts +182 -140
  183. package/src/data-structures/heap/max-heap.ts +15 -22
  184. package/src/data-structures/heap/min-heap.ts +15 -23
  185. package/src/data-structures/priority-queue/max-priority-queue.ts +14 -47
  186. package/src/data-structures/priority-queue/min-priority-queue.ts +14 -48
  187. package/src/data-structures/priority-queue/priority-queue.ts +7 -350
  188. package/src/types/data-structures/heap.ts +1 -5
  189. package/test/integration/avl-tree.test.ts +4 -4
  190. package/test/integration/bst.test.ts +8 -8
  191. package/test/unit/data-structures/graph/directed-graph.test.ts +5 -5
  192. package/test/unit/data-structures/graph/overall.test.ts +2 -2
  193. package/test/unit/data-structures/heap/heap.test.ts +26 -18
  194. package/test/unit/data-structures/heap/max-heap.test.ts +50 -42
  195. package/test/unit/data-structures/heap/min-heap.test.ts +38 -68
  196. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +1 -1
  197. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +7 -9
  198. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +14 -30
  199. package/umd/bundle.min.js +1 -1
  200. package/umd/bundle.min.js.LICENSE.txt +8 -0
  201. package/umd/bundle.min.js.map +1 -1
  202. package/test/unit/data-structures/graph/index.ts +0 -2
  203. package/test/unit/data-structures/linked-list/index.ts +0 -4
@@ -1,95 +1,234 @@
1
1
  "use strict";
2
+ /**
3
+ * data-structure-typed
4
+ *
5
+ * @author Kirk Qi
6
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
7
+ * @license MIT License
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Heap = exports.HeapItem = void 0;
4
- class HeapItem {
5
- constructor(priority = Number.MAX_SAFE_INTEGER, val = null) {
6
- this._val = val;
7
- this._priority = priority;
8
- }
9
- get priority() {
10
- return this._priority;
11
- }
12
- set priority(value) {
13
- this._priority = value;
14
- }
15
- get val() {
16
- return this._val;
17
- }
18
- set val(value) {
19
- this._val = value;
20
- }
21
- }
22
- exports.HeapItem = HeapItem;
10
+ exports.Heap = void 0;
23
11
  class Heap {
24
- constructor(options) {
25
- if (options) {
26
- const { priorityExtractor } = options;
27
- if (priorityExtractor !== undefined && typeof priorityExtractor !== 'function') {
28
- throw new Error('.constructor expects a valid priority function');
29
- }
30
- this._priorityExtractor = priorityExtractor || (el => +el);
12
+ constructor(comparator) {
13
+ this.nodes = [];
14
+ this.comparator = comparator;
15
+ }
16
+ /**
17
+ * Insert an element into the heap and maintain the heap properties.
18
+ * @param value - The element to be inserted.
19
+ */
20
+ add(value) {
21
+ this.nodes.push(value);
22
+ this.bubbleUp(this.nodes.length - 1);
23
+ return this;
24
+ }
25
+ /**
26
+ * Remove and return the top element (smallest or largest element) from the heap.
27
+ * @returns The top element or null if the heap is empty.
28
+ */
29
+ poll() {
30
+ if (this.nodes.length === 0) {
31
+ return null;
31
32
  }
32
- else {
33
- this._priorityExtractor = el => +el;
33
+ if (this.nodes.length === 1) {
34
+ return this.nodes.pop();
35
+ }
36
+ const topValue = this.nodes[0];
37
+ this.nodes[0] = this.nodes.pop();
38
+ this.sinkDown(0);
39
+ return topValue;
40
+ }
41
+ /**
42
+ * Float operation to maintain heap properties after adding an element.
43
+ * @param index - The index of the newly added element.
44
+ */
45
+ bubbleUp(index) {
46
+ const element = this.nodes[index];
47
+ while (index > 0) {
48
+ const parentIndex = Math.floor((index - 1) / 2);
49
+ const parent = this.nodes[parentIndex];
50
+ if (this.comparator(element, parent) < 0) {
51
+ this.nodes[index] = parent;
52
+ this.nodes[parentIndex] = element;
53
+ index = parentIndex;
54
+ }
55
+ else {
56
+ break;
57
+ }
34
58
  }
35
59
  }
36
- get pq() {
37
- return this._pq;
60
+ /**
61
+ * Sinking operation to maintain heap properties after removing the top element.
62
+ * @param index - The index from which to start sinking.
63
+ */
64
+ sinkDown(index) {
65
+ const leftChildIndex = 2 * index + 1;
66
+ const rightChildIndex = 2 * index + 2;
67
+ const length = this.nodes.length;
68
+ let targetIndex = index;
69
+ if (leftChildIndex < length && this.comparator(this.nodes[leftChildIndex], this.nodes[targetIndex]) < 0) {
70
+ targetIndex = leftChildIndex;
71
+ }
72
+ if (rightChildIndex < length && this.comparator(this.nodes[rightChildIndex], this.nodes[targetIndex]) < 0) {
73
+ targetIndex = rightChildIndex;
74
+ }
75
+ if (targetIndex !== index) {
76
+ const temp = this.nodes[index];
77
+ this.nodes[index] = this.nodes[targetIndex];
78
+ this.nodes[targetIndex] = temp;
79
+ this.sinkDown(targetIndex);
80
+ }
38
81
  }
39
- get priorityExtractor() {
40
- return this._priorityExtractor;
82
+ /**
83
+ * Fix the entire heap to maintain heap properties.
84
+ */
85
+ fix() {
86
+ for (let i = Math.floor(this.size / 2); i >= 0; i--)
87
+ this.sinkDown(i);
88
+ }
89
+ /**
90
+ * Peek at the top element of the heap without removing it.
91
+ * @returns The top element or null if the heap is empty.
92
+ */
93
+ peek() {
94
+ if (this.nodes.length === 0) {
95
+ return null;
96
+ }
97
+ return this.nodes[0];
41
98
  }
99
+ /**
100
+ * Get the size (number of elements) of the heap.
101
+ */
42
102
  get size() {
43
- return this._pq.size;
44
- }
103
+ return this.nodes.length;
104
+ }
105
+ /**
106
+ * Get the last element in the heap, which is not necessarily a leaf node.
107
+ * @returns The last element or null if the heap is empty.
108
+ */
109
+ leaf() {
110
+ var _a;
111
+ return (_a = this.nodes[this.size - 1]) !== null && _a !== void 0 ? _a : null;
112
+ }
113
+ /**
114
+ * Check if the heap is empty.
115
+ * @returns True if the heap is empty, otherwise false.
116
+ */
45
117
  isEmpty() {
46
- return this._pq.size < 1;
47
- }
48
- peek(isItem) {
49
- isItem = isItem !== null && isItem !== void 0 ? isItem : false;
50
- const peeked = this._pq.peek();
51
- return isItem ? peeked : peeked === null || peeked === void 0 ? void 0 : peeked.val;
118
+ return this.size === 0;
52
119
  }
53
- peekLast(isItem) {
54
- isItem = isItem !== null && isItem !== void 0 ? isItem : false;
55
- const leafItem = this._pq.leaf();
56
- return isItem ? leafItem : leafItem === null || leafItem === void 0 ? void 0 : leafItem.val;
57
- }
58
- add(priority, val) {
59
- val = val === undefined ? priority : val;
60
- this._pq.add(new HeapItem(priority, val));
61
- return this;
62
- }
63
- poll(isItem) {
64
- isItem = isItem !== null && isItem !== void 0 ? isItem : false;
65
- const top = this._pq.poll();
66
- if (!top) {
67
- return null;
120
+ clear() {
121
+ this.nodes = [];
122
+ }
123
+ refill(nodes) {
124
+ this.nodes = nodes;
125
+ this.fix();
126
+ }
127
+ /**
128
+ * Use a comparison function to check whether a binary heap contains a specific element.
129
+ * @param value - the element to check.
130
+ * @returns Returns true if the specified element is contained; otherwise, returns false.
131
+ */
132
+ has(value) {
133
+ return this.nodes.includes(value);
134
+ }
135
+ /**
136
+ * Use a comparison function to find the index of an element in the heap.
137
+ * @param value - the element to find.
138
+ * @param index - the index currently being searched.
139
+ * @returns The index of the element, or -1 if not found.
140
+ */
141
+ findIndex(value, index) {
142
+ if (index >= this.size) {
143
+ return -1;
68
144
  }
69
- return isItem ? top : top.val;
70
- }
71
- has(node) {
72
- if (node instanceof HeapItem) {
73
- return this.pq.getNodes().includes(node);
145
+ const compareResult = this.comparator(value, this.nodes[index]);
146
+ if (compareResult === 0) {
147
+ return index; // Element found
148
+ }
149
+ else if (compareResult < 0) {
150
+ // The element should be in the left subtree
151
+ return this.findIndex(value, 2 * index + 1);
74
152
  }
75
153
  else {
76
- return (this.pq.getNodes().findIndex(item => {
77
- return item.val === node;
78
- }) !== -1);
154
+ // The element should be in the right subtree
155
+ return this.findIndex(value, 2 * index + 2);
79
156
  }
80
157
  }
81
- toArray(isItem) {
82
- isItem = isItem !== null && isItem !== void 0 ? isItem : false;
83
- const itemArray = this._pq.toArray();
84
- return isItem ? itemArray : itemArray.map(item => item.val);
85
- }
86
- sort(isItem) {
87
- isItem = isItem !== null && isItem !== void 0 ? isItem : false;
88
- const sorted = this._pq.sort();
89
- return isItem ? sorted : sorted.map(item => item.val);
90
- }
91
- clear() {
92
- this._pq.clear();
158
+ /**
159
+ * Depth-first search (DFS) method, different traversal orders can be selected。
160
+ * @param order - Traversal order parameter: 'in' (in-order), 'pre' (pre-order) or 'post' (post-order).
161
+ * @returns An array containing elements traversed in the specified order.
162
+ */
163
+ dfs(order) {
164
+ const result = [];
165
+ // Auxiliary recursive function, traverses the binary heap according to the traversal order
166
+ const dfsHelper = (index) => {
167
+ if (index < this.size) {
168
+ if (order === 'in') {
169
+ dfsHelper(2 * index + 1);
170
+ result.push(this.nodes[index]);
171
+ dfsHelper(2 * index + 2);
172
+ }
173
+ else if (order === 'pre') {
174
+ result.push(this.nodes[index]);
175
+ dfsHelper(2 * index + 1);
176
+ dfsHelper(2 * index + 2);
177
+ }
178
+ else if (order === 'post') {
179
+ dfsHelper(2 * index + 1);
180
+ dfsHelper(2 * index + 2);
181
+ result.push(this.nodes[index]);
182
+ }
183
+ }
184
+ };
185
+ dfsHelper(0); // Traverse starting from the root node
186
+ return result;
187
+ }
188
+ /**
189
+ * Convert the heap to an array.
190
+ * @returns An array containing the elements of the heap.
191
+ */
192
+ toArray() {
193
+ return [...this.nodes];
194
+ }
195
+ getNodes() {
196
+ return this.nodes;
197
+ }
198
+ /**
199
+ * Clone the heap, creating a new heap with the same elements.
200
+ * @returns A new Heap instance containing the same elements.
201
+ */
202
+ clone() {
203
+ const clonedHeap = new Heap(this.comparator);
204
+ clonedHeap.nodes = [...this.nodes];
205
+ return clonedHeap;
206
+ }
207
+ /**
208
+ * Sort the elements in the heap and return them as an array.
209
+ * @returns An array containing the elements sorted in ascending order.
210
+ */
211
+ sort() {
212
+ const visitedNode = [];
213
+ const cloned = this.clone();
214
+ while (cloned.size !== 0) {
215
+ const top = cloned.poll();
216
+ if (top)
217
+ visitedNode.push(top);
218
+ }
219
+ return visitedNode;
220
+ }
221
+ /**
222
+ * Static method that creates a binary heap from an array of nodes and a comparison function.
223
+ * @param nodes
224
+ * @param comparator - Comparison function.
225
+ * @returns A new Heap instance.
226
+ */
227
+ static heapify(nodes, comparator) {
228
+ const binaryHeap = new Heap(comparator);
229
+ binaryHeap.nodes = [...nodes];
230
+ binaryHeap.fix(); // Fix heap properties
231
+ return binaryHeap;
93
232
  }
94
233
  }
95
234
  exports.Heap = Heap;
@@ -1 +1 @@
1
- {"version":3,"file":"heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/heap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/heap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './max-heap';
2
+ export * from './min-heap';
3
+ export * from './heap';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Kirk Qi
5
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ import { Heap } from './heap';
9
+ import type { CompareFunction } from '../../types';
10
+ export declare class MaxHeap<T = any> extends Heap<T> {
11
+ constructor(comparator?: CompareFunction<T>);
12
+ }
@@ -1,14 +1,24 @@
1
1
  "use strict";
2
+ /**
3
+ * data-structure-typed
4
+ *
5
+ * @author Kirk Qi
6
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
7
+ * @license MIT License
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  exports.MaxHeap = void 0;
4
11
  const heap_1 = require("./heap");
5
- const priority_queue_1 = require("../priority-queue");
6
12
  class MaxHeap extends heap_1.Heap {
7
- constructor(options) {
8
- super(options);
9
- this._pq = new priority_queue_1.PriorityQueue({
10
- comparator: (a, b) => b.priority - a.priority
11
- });
13
+ constructor(comparator = (a, b) => {
14
+ if (!(typeof a === 'number' && typeof b === 'number')) {
15
+ throw new Error('The a, b params of compare function must be number');
16
+ }
17
+ else {
18
+ return b - a;
19
+ }
20
+ }) {
21
+ super(comparator);
12
22
  }
13
23
  }
14
24
  exports.MaxHeap = MaxHeap;
@@ -1 +1 @@
1
- {"version":3,"file":"max-heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/max-heap.ts"],"names":[],"mappings":";;;AAQA,iCAAsC;AACtC,sDAAgD;AAOhD,MAAa,OAAiB,SAAQ,WAAO;IAQ3C,YAAY,OAAwB;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,IAAI,8BAAa,CAAc;YACxC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;SAC9C,CAAC,CAAC;IACL,CAAC;CACF;AAdD,0BAcC"}
1
+ {"version":3,"file":"max-heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/max-heap.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,iCAA4B;AAG5B,MAAa,OAAiB,SAAQ,WAAO;IAC3C,YACE,aAAiC,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;QAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;SACvE;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,CAAC;SACd;IACH,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,CAAC;IACpB,CAAC;CACF;AAZD,0BAYC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * data-structure-typed
3
+ *
4
+ * @author Kirk Qi
5
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
6
+ * @license MIT License
7
+ */
8
+ import { Heap } from './heap';
9
+ import type { CompareFunction } from '../../types';
10
+ export declare class MinHeap<T = any> extends Heap<T> {
11
+ constructor(comparator?: CompareFunction<T>);
12
+ }
@@ -1,14 +1,24 @@
1
1
  "use strict";
2
+ /**
3
+ * data-structure-typed
4
+ *
5
+ * @author Kirk Qi
6
+ * @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
7
+ * @license MIT License
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  exports.MinHeap = void 0;
4
11
  const heap_1 = require("./heap");
5
- const priority_queue_1 = require("../priority-queue");
6
12
  class MinHeap extends heap_1.Heap {
7
- constructor(options) {
8
- super(options);
9
- this._pq = new priority_queue_1.PriorityQueue({
10
- comparator: (a, b) => a.priority - b.priority
11
- });
13
+ constructor(comparator = (a, b) => {
14
+ if (!(typeof a === 'number' && typeof b === 'number')) {
15
+ throw new Error('The a, b params of compare function must be number');
16
+ }
17
+ else {
18
+ return a - b;
19
+ }
20
+ }) {
21
+ super(comparator);
12
22
  }
13
23
  }
14
24
  exports.MinHeap = MinHeap;
@@ -1 +1 @@
1
- {"version":3,"file":"min-heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/min-heap.ts"],"names":[],"mappings":";;;AAQA,iCAAsC;AACtC,sDAAgD;AAOhD,MAAa,OAAiB,SAAQ,WAAO;IAS3C,YAAY,OAAwB;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,IAAI,8BAAa,CAAc;YACxC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;SAC9C,CAAC,CAAC;IACL,CAAC;CACF;AAfD,0BAeC"}
1
+ {"version":3,"file":"min-heap.js","sourceRoot":"","sources":["../../../src/data-structures/heap/min-heap.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,iCAA4B;AAG5B,MAAa,OAAiB,SAAQ,WAAO;IAC3C,YACE,aAAiC,CAAC,CAAI,EAAE,CAAI,EAAE,EAAE;QAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;SACvE;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,CAAC;SACd;IACH,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,CAAC;IACpB,CAAC;CACF;AAZD,0BAYC"}
@@ -0,0 +1,11 @@
1
+ export * from './hash';
2
+ export * from './linked-list';
3
+ export * from './stack';
4
+ export * from './queue';
5
+ export * from './graph';
6
+ export * from './binary-tree';
7
+ export * from './tree';
8
+ export * from './heap';
9
+ export * from './priority-queue';
10
+ export * from './matrix';
11
+ export * from './trie';