stack-typed 2.0.5 → 2.1.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.
- package/dist/data-structures/base/iterable-element-base.d.ts +186 -83
- package/dist/data-structures/base/iterable-element-base.js +149 -107
- package/dist/data-structures/base/iterable-entry-base.d.ts +95 -119
- package/dist/data-structures/base/iterable-entry-base.js +59 -116
- package/dist/data-structures/base/linear-base.d.ts +250 -192
- package/dist/data-structures/base/linear-base.js +137 -274
- package/dist/data-structures/binary-tree/avl-tree-counter.d.ts +126 -158
- package/dist/data-structures/binary-tree/avl-tree-counter.js +171 -205
- package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -69
- package/dist/data-structures/binary-tree/avl-tree-multi-map.js +135 -87
- package/dist/data-structures/binary-tree/avl-tree.d.ts +138 -149
- package/dist/data-structures/binary-tree/avl-tree.js +208 -195
- package/dist/data-structures/binary-tree/binary-tree.d.ts +476 -632
- package/dist/data-structures/binary-tree/binary-tree.js +602 -873
- package/dist/data-structures/binary-tree/bst.d.ts +258 -306
- package/dist/data-structures/binary-tree/bst.js +505 -481
- package/dist/data-structures/binary-tree/red-black-tree.d.ts +107 -179
- package/dist/data-structures/binary-tree/red-black-tree.js +114 -209
- package/dist/data-structures/binary-tree/tree-counter.d.ts +132 -154
- package/dist/data-structures/binary-tree/tree-counter.js +172 -203
- package/dist/data-structures/binary-tree/tree-multi-map.d.ts +72 -69
- package/dist/data-structures/binary-tree/tree-multi-map.js +105 -85
- package/dist/data-structures/graph/abstract-graph.d.ts +238 -233
- package/dist/data-structures/graph/abstract-graph.js +267 -237
- package/dist/data-structures/graph/directed-graph.d.ts +108 -224
- package/dist/data-structures/graph/directed-graph.js +146 -233
- package/dist/data-structures/graph/map-graph.d.ts +49 -55
- package/dist/data-structures/graph/map-graph.js +56 -59
- package/dist/data-structures/graph/undirected-graph.d.ts +103 -146
- package/dist/data-structures/graph/undirected-graph.js +129 -149
- package/dist/data-structures/hash/hash-map.d.ts +164 -338
- package/dist/data-structures/hash/hash-map.js +270 -457
- package/dist/data-structures/heap/heap.d.ts +214 -289
- package/dist/data-structures/heap/heap.js +340 -349
- package/dist/data-structures/heap/max-heap.d.ts +11 -47
- package/dist/data-structures/heap/max-heap.js +11 -66
- package/dist/data-structures/heap/min-heap.d.ts +12 -47
- package/dist/data-structures/heap/min-heap.js +11 -66
- package/dist/data-structures/linked-list/doubly-linked-list.d.ts +231 -347
- package/dist/data-structures/linked-list/doubly-linked-list.js +368 -494
- package/dist/data-structures/linked-list/singly-linked-list.d.ts +261 -310
- package/dist/data-structures/linked-list/singly-linked-list.js +447 -466
- package/dist/data-structures/linked-list/skip-linked-list.d.ts +0 -107
- package/dist/data-structures/linked-list/skip-linked-list.js +0 -100
- package/dist/data-structures/priority-queue/max-priority-queue.d.ts +12 -56
- package/dist/data-structures/priority-queue/max-priority-queue.js +11 -78
- package/dist/data-structures/priority-queue/min-priority-queue.d.ts +11 -57
- package/dist/data-structures/priority-queue/min-priority-queue.js +10 -79
- package/dist/data-structures/priority-queue/priority-queue.d.ts +2 -61
- package/dist/data-structures/priority-queue/priority-queue.js +8 -83
- package/dist/data-structures/queue/deque.d.ts +227 -254
- package/dist/data-structures/queue/deque.js +309 -348
- package/dist/data-structures/queue/queue.d.ts +180 -201
- package/dist/data-structures/queue/queue.js +265 -248
- package/dist/data-structures/stack/stack.d.ts +124 -102
- package/dist/data-structures/stack/stack.js +181 -125
- package/dist/data-structures/trie/trie.d.ts +164 -165
- package/dist/data-structures/trie/trie.js +189 -172
- package/dist/interfaces/binary-tree.d.ts +56 -6
- package/dist/interfaces/graph.d.ts +16 -0
- package/dist/types/data-structures/base/base.d.ts +1 -1
- package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -0
- package/dist/types/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts +1 -1
- package/dist/utils/utils.js +2 -1
- package/package.json +2 -2
- package/src/data-structures/base/iterable-element-base.ts +238 -115
- package/src/data-structures/base/iterable-entry-base.ts +96 -120
- package/src/data-structures/base/linear-base.ts +271 -277
- package/src/data-structures/binary-tree/avl-tree-counter.ts +196 -217
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +188 -102
- package/src/data-structures/binary-tree/avl-tree.ts +237 -206
- package/src/data-structures/binary-tree/binary-tree.ts +665 -896
- package/src/data-structures/binary-tree/bst.ts +565 -572
- package/src/data-structures/binary-tree/red-black-tree.ts +157 -223
- package/src/data-structures/binary-tree/tree-counter.ts +195 -219
- package/src/data-structures/binary-tree/tree-multi-map.ts +127 -98
- package/src/data-structures/graph/abstract-graph.ts +339 -264
- package/src/data-structures/graph/directed-graph.ts +146 -236
- package/src/data-structures/graph/map-graph.ts +63 -60
- package/src/data-structures/graph/undirected-graph.ts +129 -152
- package/src/data-structures/hash/hash-map.ts +274 -496
- package/src/data-structures/heap/heap.ts +389 -402
- package/src/data-structures/heap/max-heap.ts +12 -76
- package/src/data-structures/heap/min-heap.ts +13 -76
- package/src/data-structures/linked-list/doubly-linked-list.ts +426 -530
- package/src/data-structures/linked-list/singly-linked-list.ts +495 -517
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -108
- package/src/data-structures/priority-queue/max-priority-queue.ts +12 -87
- package/src/data-structures/priority-queue/min-priority-queue.ts +11 -88
- package/src/data-structures/priority-queue/priority-queue.ts +3 -92
- package/src/data-structures/queue/deque.ts +381 -357
- package/src/data-structures/queue/queue.ts +310 -264
- package/src/data-structures/stack/stack.ts +217 -131
- package/src/data-structures/trie/trie.ts +240 -175
- package/src/interfaces/binary-tree.ts +240 -6
- package/src/interfaces/graph.ts +37 -0
- package/src/types/data-structures/base/base.ts +5 -5
- package/src/types/data-structures/graph/abstract-graph.ts +5 -0
- package/src/types/utils/utils.ts +2 -0
- package/src/utils/utils.ts +9 -14
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* data-structure-typed
|
|
3
|
-
*
|
|
4
3
|
* @author Kirk Qi
|
|
5
4
|
* @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
|
|
6
5
|
* @license MIT License
|
|
7
6
|
*/
|
|
8
|
-
import type {
|
|
7
|
+
import type { HeapOptions } from '../../types';
|
|
9
8
|
import { Heap } from './heap';
|
|
10
9
|
|
|
11
10
|
/**
|
|
11
|
+
* @template E
|
|
12
|
+
* @template R
|
|
13
|
+
* Max-oriented binary heap.
|
|
14
|
+
* Notes and typical use-cases are documented in {@link Heap}.
|
|
15
|
+
*
|
|
12
16
|
* 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
|
|
13
17
|
* 2. Heap Properties: The value of each parent node is greater than or equal to the value of its children.
|
|
14
18
|
* 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
|
|
@@ -17,8 +21,14 @@ import { Heap } from './heap';
|
|
|
17
21
|
* 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
|
|
18
22
|
* 7. Efficient Sorting Algorithms: For example, heap sort. Heap sort uses the properties of a heap to sort elements.
|
|
19
23
|
* 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum-spanning tree algorithm, which use heaps to improve performance.
|
|
24
|
+
* @example
|
|
20
25
|
*/
|
|
21
26
|
export class MaxHeap<E = any, R = any> extends Heap<E, R> {
|
|
27
|
+
/**
|
|
28
|
+
* Create a max-heap. For objects, supply a custom comparator.
|
|
29
|
+
* @param elements Optional initial elements.
|
|
30
|
+
* @param options Optional configuration.
|
|
31
|
+
*/
|
|
22
32
|
constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
|
|
23
33
|
super(elements, {
|
|
24
34
|
comparator: (a: E, b: E): number => {
|
|
@@ -34,78 +44,4 @@ export class MaxHeap<E = any, R = any> extends Heap<E, R> {
|
|
|
34
44
|
...options
|
|
35
45
|
});
|
|
36
46
|
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* The `clone` function returns a new instance of the `MaxHeap` class with the same properties as the
|
|
40
|
-
* current instance.
|
|
41
|
-
* @returns The `clone()` method is returning a new instance of the `MaxHeap` class with the same
|
|
42
|
-
* properties as the current instance.
|
|
43
|
-
*/
|
|
44
|
-
override clone(): MaxHeap<E, R> {
|
|
45
|
-
return new MaxHeap<E, R>(this, { comparator: this.comparator, toElementFn: this.toElementFn });
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Time Complexity: O(n)
|
|
50
|
-
* Space Complexity: O(n)
|
|
51
|
-
*
|
|
52
|
-
* The `filter` function creates a new MaxHeap object containing elements that pass a given callback
|
|
53
|
-
* function.
|
|
54
|
-
* @param callback - The `callback` parameter is a function that will be called for each element in
|
|
55
|
-
* the heap. It takes three arguments: the current element, the index of the current element, and the
|
|
56
|
-
* heap itself. The callback function should return a boolean value indicating whether the current
|
|
57
|
-
* element should be included in the filtered list
|
|
58
|
-
* @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
|
|
59
|
-
* to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
|
|
60
|
-
* passed as the `this` value to the `callback` function. If `thisArg` is
|
|
61
|
-
* @returns The `filter` method is returning a new `MaxHeap` object that contains the elements that pass
|
|
62
|
-
* the filter condition specified by the `callback` function.
|
|
63
|
-
*/
|
|
64
|
-
override filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): MaxHeap<E, R> {
|
|
65
|
-
const filteredList = new MaxHeap<E, R>([], { toElementFn: this.toElementFn, comparator: this.comparator });
|
|
66
|
-
let index = 0;
|
|
67
|
-
for (const current of this) {
|
|
68
|
-
if (callback.call(thisArg, current, index, this)) {
|
|
69
|
-
filteredList.add(current);
|
|
70
|
-
}
|
|
71
|
-
index++;
|
|
72
|
-
}
|
|
73
|
-
return filteredList;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Time Complexity: O(n log n)
|
|
78
|
-
* Space Complexity: O(n)
|
|
79
|
-
*
|
|
80
|
-
* The `map` function creates a new heap by applying a callback function to each element of the
|
|
81
|
-
* original heap.
|
|
82
|
-
* @param callback - The `callback` parameter is a function that will be called for each element in
|
|
83
|
-
* the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
|
|
84
|
-
* element), and `this` (the heap itself). The callback function should return a value of
|
|
85
|
-
* @param comparator - The `comparator` parameter is a function that defines the order of the
|
|
86
|
-
* elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
|
|
87
|
-
* if `a` should be placed before `b`, a positive number if `a` should be placed after
|
|
88
|
-
* @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
|
|
89
|
-
* element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
|
|
90
|
-
* returns a value of type `T`. This function is used to transform the elements of the original
|
|
91
|
-
* @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
|
|
92
|
-
* specify the value of `this` within the callback function. It is used to set the context or scope
|
|
93
|
-
* in which the callback function will be executed. If `thisArg` is provided, it will be used as the
|
|
94
|
-
* value of
|
|
95
|
-
* @returns a new instance of the `MaxHeap` class with the mapped elements.
|
|
96
|
-
*/
|
|
97
|
-
override map<EM, RM>(
|
|
98
|
-
callback: ElementCallback<E, R, EM>,
|
|
99
|
-
comparator: Comparator<EM>,
|
|
100
|
-
toElementFn?: (rawElement: RM) => EM,
|
|
101
|
-
thisArg?: any
|
|
102
|
-
): MaxHeap<EM, RM> {
|
|
103
|
-
const mappedHeap: MaxHeap<EM, RM> = new MaxHeap<EM, RM>([], { comparator, toElementFn });
|
|
104
|
-
let index = 0;
|
|
105
|
-
for (const el of this) {
|
|
106
|
-
mappedHeap.add(callback.call(thisArg, el, index, this));
|
|
107
|
-
index++;
|
|
108
|
-
}
|
|
109
|
-
return mappedHeap;
|
|
110
|
-
}
|
|
111
47
|
}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* @remarks Time O(n log n), Space O(n).
|
|
2
3
|
* data-structure-typed
|
|
3
|
-
*
|
|
4
4
|
* @author Kirk Qi
|
|
5
5
|
* @copyright Copyright (c) 2022 Kirk Qi <qilinaus@gmail.com>
|
|
6
6
|
* @license MIT License
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type { HeapOptions } from '../../types';
|
|
9
9
|
import { Heap } from './heap';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
+
* @template E
|
|
13
|
+
* @template R
|
|
14
|
+
* Min-oriented binary heap.
|
|
15
|
+
* Notes and typical use-cases are documented in {@link Heap}.
|
|
16
|
+
*
|
|
12
17
|
* 1. Complete Binary Tree: Heaps are typically complete binary trees, meaning every level is fully filled except possibly for the last level, which has nodes as far left as possible.
|
|
13
18
|
* 2. MinHeap Properties: The value of each parent node is less than or equal to the value of its children.
|
|
14
19
|
* 3. Root Node Access: In a heap, the largest element (in a max heap) or the smallest element (in a min heap) is always at the root of the tree.
|
|
@@ -17,83 +22,15 @@ import { Heap } from './heap';
|
|
|
17
22
|
* 6. Non-linear Search: While a heap allows rapid access to its largest or smallest element, it is less efficient for other operations, such as searching for a specific element, as it is not designed for these tasks.
|
|
18
23
|
* 7. Efficient Sorting Algorithms: For example, heap sort. MinHeap sort uses the properties of a heap to sort elements.
|
|
19
24
|
* 8. Graph Algorithms: Such as Dijkstra's shortest path algorithm and Prim's minimum spanning tree algorithm, which use heaps to improve performance.
|
|
25
|
+
* @example
|
|
20
26
|
*/
|
|
21
27
|
export class MinHeap<E = any, R = any> extends Heap<E, R> {
|
|
22
|
-
constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
|
|
23
|
-
super(elements, options);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* The `clone` function returns a new instance of the `MinHeap` class with the same comparator and
|
|
28
|
-
* toElementFn as the original instance.
|
|
29
|
-
* @returns The `clone()` method is returning a new instance of the `MinHeap` class with the same
|
|
30
|
-
* properties as the current instance.
|
|
31
|
-
*/
|
|
32
|
-
override clone(): MinHeap<E, R> {
|
|
33
|
-
return new MinHeap<E, R>(this, { comparator: this.comparator, toElementFn: this.toElementFn });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Time Complexity: O(n)
|
|
38
|
-
* Space Complexity: O(n)
|
|
39
|
-
*
|
|
40
|
-
* The `filter` function creates a new MinHeap object containing elements that pass a given callback
|
|
41
|
-
* function.
|
|
42
|
-
* @param callback - The `callback` parameter is a function that will be called for each element in
|
|
43
|
-
* the heap. It takes three arguments: the current element, the index of the current element, and the
|
|
44
|
-
* heap itself. The callback function should return a boolean value indicating whether the current
|
|
45
|
-
* element should be included in the filtered list
|
|
46
|
-
* @param {any} [thisArg] - The `thisArg` parameter is an optional argument that specifies the value
|
|
47
|
-
* to be used as `this` when executing the `callback` function. If `thisArg` is provided, it will be
|
|
48
|
-
* passed as the `this` value to the `callback` function. If `thisArg` is
|
|
49
|
-
* @returns The `filter` method is returning a new `MinHeap` object that contains the elements that pass
|
|
50
|
-
* the filter condition specified by the `callback` function.
|
|
51
|
-
*/
|
|
52
|
-
override filter(callback: ElementCallback<E, R, boolean>, thisArg?: any): MinHeap<E, R> {
|
|
53
|
-
const filteredList = new MinHeap<E, R>([], { toElementFn: this.toElementFn, comparator: this.comparator });
|
|
54
|
-
let index = 0;
|
|
55
|
-
for (const current of this) {
|
|
56
|
-
if (callback.call(thisArg, current, index, this)) {
|
|
57
|
-
filteredList.add(current);
|
|
58
|
-
}
|
|
59
|
-
index++;
|
|
60
|
-
}
|
|
61
|
-
return filteredList;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
28
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* The `map` function creates a new heap by applying a callback function to each element of the
|
|
69
|
-
* original heap.
|
|
70
|
-
* @param callback - The `callback` parameter is a function that will be called for each element in
|
|
71
|
-
* the heap. It takes three arguments: `el` (the current element), `index` (the index of the current
|
|
72
|
-
* element), and `this` (the heap itself). The callback function should return a value of
|
|
73
|
-
* @param comparator - The `comparator` parameter is a function that defines the order of the
|
|
74
|
-
* elements in the heap. It takes two elements `a` and `b` as arguments and returns a negative number
|
|
75
|
-
* if `a` should be placed before `b`, a positive number if `a` should be placed after
|
|
76
|
-
* @param [toElementFn] - The `toElementFn` parameter is an optional function that converts the raw
|
|
77
|
-
* element `RR` to the desired type `T`. It takes a single argument `rawElement` of type `RR` and
|
|
78
|
-
* returns a value of type `T`. This function is used to transform the elements of the original
|
|
79
|
-
* @param {any} [thisArg] - The `thisArg` parameter is an optional argument that allows you to
|
|
80
|
-
* specify the value of `this` within the callback function. It is used to set the context or scope
|
|
81
|
-
* in which the callback function will be executed. If `thisArg` is provided, it will be used as the
|
|
82
|
-
* value of
|
|
83
|
-
* @returns a new instance of the `MinHeap` class with the mapped elements.
|
|
29
|
+
* Create a min-heap.
|
|
30
|
+
* @param elements Optional initial elements.
|
|
31
|
+
* @param options Optional configuration.
|
|
84
32
|
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
comparator: Comparator<EM>,
|
|
88
|
-
toElementFn?: (rawElement: RM) => EM,
|
|
89
|
-
thisArg?: any
|
|
90
|
-
): MinHeap<EM, RM> {
|
|
91
|
-
const mappedHeap: MinHeap<EM, RM> = new MinHeap<EM, RM>([], { comparator, toElementFn });
|
|
92
|
-
let index = 0;
|
|
93
|
-
for (const el of this) {
|
|
94
|
-
mappedHeap.add(callback.call(thisArg, el, index, this));
|
|
95
|
-
index++;
|
|
96
|
-
}
|
|
97
|
-
return mappedHeap;
|
|
33
|
+
constructor(elements: Iterable<E> | Iterable<R> = [], options?: HeapOptions<E, R>) {
|
|
34
|
+
super(elements, options);
|
|
98
35
|
}
|
|
99
36
|
}
|