@raikuxq/alg-ds 1.1.6 → 1.1.7

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 (177) hide show
  1. package/lib/algorithms/binary-search.d.ts +5 -0
  2. package/lib/algorithms/binary-search.js +27 -0
  3. package/lib/algorithms/factorial.d.ts +9 -0
  4. package/lib/algorithms/factorial.js +17 -0
  5. package/lib/algorithms/fibonacci.d.ts +9 -0
  6. package/lib/algorithms/fibonacci.js +17 -0
  7. package/lib/algorithms/memoize.d.ts +5 -0
  8. package/lib/algorithms/memoize.js +22 -0
  9. package/lib/algorithms/sorts/bubble-sort.d.ts +9 -0
  10. package/lib/algorithms/sorts/bubble-sort.js +23 -0
  11. package/lib/algorithms/sorts/insertion-sort.d.ts +9 -0
  12. package/lib/algorithms/sorts/insertion-sort.js +25 -0
  13. package/lib/algorithms/sorts/merge-sort.d.ts +9 -0
  14. package/lib/algorithms/sorts/merge-sort.js +61 -0
  15. package/lib/algorithms/sorts/quick-sort.d.ts +9 -0
  16. package/lib/algorithms/sorts/quick-sort.js +45 -0
  17. package/lib/algorithms/sorts/select-sort.d.ts +9 -0
  18. package/lib/algorithms/sorts/select-sort.js +20 -0
  19. package/lib/algorithms/transpose-matrix.d.ts +5 -0
  20. package/lib/algorithms/transpose-matrix.js +18 -0
  21. package/lib/constants.d.ts +2 -0
  22. package/lib/constants.js +6 -0
  23. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
  24. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
  25. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
  26. package/lib/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
  27. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
  28. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
  29. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
  30. package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
  31. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
  32. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
  33. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
  34. package/lib/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
  35. package/lib/data-structures/Graph/AbstractGraph.d.ts +84 -0
  36. package/lib/data-structures/Graph/AbstractGraph.js +143 -0
  37. package/lib/data-structures/Graph/DirectedGraph.d.ts +24 -0
  38. package/lib/data-structures/Graph/DirectedGraph.js +86 -0
  39. package/lib/data-structures/Graph/GraphEdge.d.ts +16 -0
  40. package/lib/data-structures/Graph/GraphEdge.js +43 -0
  41. package/lib/data-structures/Graph/UndirectedGraph.d.ts +28 -0
  42. package/lib/data-structures/Graph/UndirectedGraph.js +103 -0
  43. package/lib/data-structures/Graph/demo/generateRandomGraph.d.ts +4 -0
  44. package/lib/data-structures/Graph/demo/generateRandomGraph.js +66 -0
  45. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.d.ts +35 -0
  46. package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +90 -0
  47. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.d.ts +28 -0
  48. package/lib/data-structures/Graph/iterator/GraphIteratorBFS.js +70 -0
  49. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.d.ts +28 -0
  50. package/lib/data-structures/Graph/iterator/GraphIteratorDFS.js +70 -0
  51. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
  52. package/lib/data-structures/Graph/iterator/GraphIteratorDijkstra.js +99 -0
  53. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.d.ts +19 -0
  54. package/lib/data-structures/Graph/presenter/presenterAdjacencyLists.js +28 -0
  55. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
  56. package/lib/data-structures/Graph/presenter/presenterAdjacencyMatrix.js +48 -0
  57. package/lib/data-structures/Graph/searching/hasPath.d.ts +9 -0
  58. package/lib/data-structures/Graph/searching/hasPath.js +30 -0
  59. package/lib/data-structures/Graph/searching/shortestPath.d.ts +9 -0
  60. package/lib/data-structures/Graph/searching/shortestPath.js +30 -0
  61. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.d.ts +6 -0
  62. package/lib/data-structures/Graph/strategy/BFSIterationStrategy.js +13 -0
  63. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.d.ts +6 -0
  64. package/lib/data-structures/Graph/strategy/DFSIterationStrategy.js +13 -0
  65. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.d.ts +6 -0
  66. package/lib/data-structures/Graph/strategy/DijkstraIterationStrategy.js +13 -0
  67. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.d.ts +2 -0
  68. package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +14 -0
  69. package/lib/data-structures/HashTable/HashTable.d.ts +73 -0
  70. package/lib/data-structures/HashTable/HashTable.js +171 -0
  71. package/lib/data-structures/HashTable/HashTableNode.d.ts +11 -0
  72. package/lib/data-structures/HashTable/HashTableNode.js +39 -0
  73. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
  74. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
  75. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
  76. package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
  77. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
  78. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
  79. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
  80. package/lib/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
  81. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
  82. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
  83. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
  84. package/lib/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
  85. package/lib/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
  86. package/lib/data-structures/LoopedArray/LoopedArray.js +169 -0
  87. package/lib/data-structures/Queue/Queue.d.ts +50 -0
  88. package/lib/data-structures/Queue/Queue.js +85 -0
  89. package/lib/data-structures/Stack/Stack.d.ts +50 -0
  90. package/lib/data-structures/Stack/Stack.js +85 -0
  91. package/lib/exceptions/IllegalCapacityException.d.ts +4 -0
  92. package/lib/exceptions/IllegalCapacityException.js +28 -0
  93. package/lib/exceptions/IndexOutOfBoundsException.d.ts +4 -0
  94. package/lib/exceptions/IndexOutOfBoundsException.js +28 -0
  95. package/lib/exceptions/IsAlreadyExistsException.d.ts +4 -0
  96. package/lib/exceptions/IsAlreadyExistsException.js +28 -0
  97. package/lib/exceptions/IsEmptyException.d.ts +4 -0
  98. package/lib/exceptions/IsEmptyException.js +28 -0
  99. package/lib/exceptions/IsFullException.d.ts +4 -0
  100. package/lib/exceptions/IsFullException.js +28 -0
  101. package/lib/exceptions/IsNotFoundException.d.ts +4 -0
  102. package/lib/exceptions/IsNotFoundException.js +28 -0
  103. package/lib/exceptions/base/IllegalArgumentException.d.ts +3 -0
  104. package/lib/exceptions/base/IllegalArgumentException.js +27 -0
  105. package/lib/exceptions/base/IllegalStateException.d.ts +3 -0
  106. package/lib/exceptions/base/IllegalStateException.js +27 -0
  107. package/lib/exports/algorithms.d.ts +16 -0
  108. package/lib/exports/algorithms.js +36 -0
  109. package/lib/exports/constants.d.ts +2 -0
  110. package/lib/exports/constants.js +7 -0
  111. package/lib/exports/data-structures.d.ts +11 -0
  112. package/lib/exports/data-structures.js +24 -0
  113. package/lib/exports/helpers.d.ts +6 -0
  114. package/lib/exports/helpers.js +14 -0
  115. package/lib/exports/sorts.d.ts +6 -0
  116. package/lib/exports/sorts.js +14 -0
  117. package/lib/exports/utils.d.ts +3 -0
  118. package/lib/exports/utils.js +14 -0
  119. package/lib/exports.d.ts +52 -0
  120. package/lib/exports.js +103 -0
  121. package/lib/helpers/createBinaryTree.d.ts +6 -0
  122. package/lib/helpers/createBinaryTree.js +22 -0
  123. package/lib/helpers/createGraph.d.ts +6 -0
  124. package/lib/helpers/createGraph.js +24 -0
  125. package/lib/helpers/createGraphFromMatrix.d.ts +7 -0
  126. package/lib/helpers/createGraphFromMatrix.js +42 -0
  127. package/lib/helpers/createLinkedList.d.ts +3 -0
  128. package/lib/helpers/createLinkedList.js +21 -0
  129. package/lib/index.d.ts +3 -0
  130. package/lib/index.js +6 -0
  131. package/lib/types/ArrayMatrix.d.ts +1 -0
  132. package/lib/types/ArrayMatrix.js +3 -0
  133. package/lib/types/EnumBinarySearchTreeType.d.ts +4 -0
  134. package/lib/types/EnumBinarySearchTreeType.js +9 -0
  135. package/lib/types/EnumGraphType.d.ts +4 -0
  136. package/lib/types/EnumGraphType.js +9 -0
  137. package/lib/types/EnumLinkedListType.d.ts +4 -0
  138. package/lib/types/EnumLinkedListType.js +9 -0
  139. package/lib/types/EnumRandomGenerationFormat.d.ts +4 -0
  140. package/lib/types/EnumRandomGenerationFormat.js +9 -0
  141. package/lib/types/EnumTreeTraversalType.d.ts +5 -0
  142. package/lib/types/EnumTreeTraversalType.js +10 -0
  143. package/lib/types/FnCompareTwo.d.ts +1 -0
  144. package/lib/types/FnCompareTwo.js +3 -0
  145. package/lib/types/FnToMemoize.d.ts +1 -0
  146. package/lib/types/FnToMemoize.js +3 -0
  147. package/lib/types/IArrayFacade.d.ts +4 -0
  148. package/lib/types/IArrayFacade.js +3 -0
  149. package/lib/types/IBiDirectIterable.d.ts +5 -0
  150. package/lib/types/IBiDirectIterable.js +3 -0
  151. package/lib/types/IBiDirectIterator.d.ts +11 -0
  152. package/lib/types/IBiDirectIterator.js +3 -0
  153. package/lib/types/IBinaryTree.d.ts +12 -0
  154. package/lib/types/IBinaryTree.js +3 -0
  155. package/lib/types/IConvertableToArray.d.ts +4 -0
  156. package/lib/types/IConvertableToArray.js +3 -0
  157. package/lib/types/IGraph.d.ts +14 -0
  158. package/lib/types/IGraph.js +3 -0
  159. package/lib/types/IGraphIterationStrategy.d.ts +5 -0
  160. package/lib/types/IGraphIterationStrategy.js +3 -0
  161. package/lib/types/IGraphIterator.d.ts +11 -0
  162. package/lib/types/IGraphIterator.js +3 -0
  163. package/lib/types/IIterable.d.ts +4 -0
  164. package/lib/types/IIterable.js +3 -0
  165. package/lib/types/IIterator.d.ts +14 -0
  166. package/lib/types/IIterator.js +3 -0
  167. package/lib/types/IKeyValueStorage.d.ts +8 -0
  168. package/lib/types/IKeyValueStorage.js +3 -0
  169. package/lib/types/ILinearStorage.d.ts +11 -0
  170. package/lib/types/ILinearStorage.js +3 -0
  171. package/lib/types/ILinearStorageRA.d.ts +13 -0
  172. package/lib/types/ILinearStorageRA.js +3 -0
  173. package/lib/types/ILinkedList.d.ts +4 -0
  174. package/lib/types/ILinkedList.js +3 -0
  175. package/lib/utils.d.ts +33 -0
  176. package/lib/utils.js +108 -0
  177. package/package.json +1 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractLinkedNode_1 = require("../AbstractLinkedList/AbstractLinkedNode");
17
+ var DoubleLinkedNode = /** @class */ (function (_super) {
18
+ __extends(DoubleLinkedNode, _super);
19
+ /**
20
+ * Will create empty node
21
+ */
22
+ function DoubleLinkedNode(data, next, prev) {
23
+ if (next === void 0) { next = null; }
24
+ if (prev === void 0) { prev = null; }
25
+ var _this = _super.call(this, data) || this;
26
+ _this._prev = prev;
27
+ _this._next = next;
28
+ return _this;
29
+ }
30
+ Object.defineProperty(DoubleLinkedNode.prototype, "prev", {
31
+ /**
32
+ * Get previous node link
33
+ */
34
+ get: function () {
35
+ return this._prev;
36
+ },
37
+ /**
38
+ * Set previous node link
39
+ */
40
+ set: function (value) {
41
+ this._prev = value;
42
+ },
43
+ enumerable: false,
44
+ configurable: true
45
+ });
46
+ Object.defineProperty(DoubleLinkedNode.prototype, "next", {
47
+ /**
48
+ * @inheritDoc
49
+ */
50
+ get: function () {
51
+ return this._next;
52
+ },
53
+ /**
54
+ * @inheritDoc
55
+ */
56
+ set: function (value) {
57
+ this._next = value;
58
+ },
59
+ enumerable: false,
60
+ configurable: true
61
+ });
62
+ return DoubleLinkedNode;
63
+ }(AbstractLinkedNode_1.default));
64
+ exports.default = DoubleLinkedNode;
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG91YmxlTGlua2VkTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9Eb3VibGVMaW5rZWRMaXN0L0RvdWJsZUxpbmtlZE5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0VBQTBFO0FBRTFFO0lBQWlELG9DQUFxQjtJQUlwRTs7T0FFRztJQUNILDBCQUNFLElBQU8sRUFDUCxJQUF1QyxFQUN2QyxJQUF1QztRQUR2QyxxQkFBQSxFQUFBLFdBQXVDO1FBQ3ZDLHFCQUFBLEVBQUEsV0FBdUM7UUFIekMsWUFLRSxrQkFBTSxJQUFJLENBQUMsU0FHWjtRQUZDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztJQUNwQixDQUFDO0lBS0Qsc0JBQVcsa0NBQUk7UUFJZjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7UUFaRDs7V0FFRzthQUNILFVBQWdCLEtBQWlDO1lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBO0lBWUQsc0JBQVcsa0NBQUk7UUFJZjs7V0FFRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7UUFaRDs7V0FFRzthQUNILFVBQWdCLEtBQWlDO1lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBO0lBUUgsdUJBQUM7QUFBRCxDQUFDLEFBNUNELENBQWlELDRCQUFrQixHQTRDbEUifQ==
@@ -0,0 +1,52 @@
1
+ import IIterator from "../../../types/IIterator";
2
+ import IIterable from "../../../types/IIterable";
3
+ import AbstractLinkedList from "../AbstractLinkedList/AbstractLinkedList";
4
+ import SingleLinkedNode from "./SingleLinkedNode";
5
+ /**
6
+ * Linear data structure
7
+ * Each node has next
8
+ * Head's next node is tail
9
+ */
10
+ export default class SingleLinkedList<T> extends AbstractLinkedList<T> implements IIterable<T> {
11
+ /**
12
+ * Override types
13
+ */
14
+ protected _head: SingleLinkedNode<T> | null;
15
+ protected _tail: SingleLinkedNode<T> | null;
16
+ /**
17
+ * @inheritDoc
18
+ */
19
+ constructor(capacity?: number);
20
+ /**
21
+ * Find previous sibling of given node
22
+ */
23
+ private getPrevNode;
24
+ /**
25
+ * @inheritDoc
26
+ */
27
+ protected createNode(value: T): SingleLinkedNode<T>;
28
+ /**
29
+ * @inheritDoc
30
+ */
31
+ protected insertNodeBetweenTwoNodesImpl(targetNode: SingleLinkedNode<T>, leftNode: SingleLinkedNode<T>, rightNode: SingleLinkedNode<T>): void;
32
+ /**
33
+ * @inheritDoc
34
+ */
35
+ protected deleteNodeImpl(node: SingleLinkedNode<T>): void;
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ protected popImpl(): void;
40
+ /**
41
+ * @inheritDoc
42
+ */
43
+ protected shiftImpl(): void;
44
+ /**
45
+ * @inheritDoc
46
+ */
47
+ reverse(): void;
48
+ /**
49
+ * List iterator
50
+ */
51
+ iterator(fromIndex?: number): IIterator<T>;
52
+ }
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractLinkedList_1 = require("../AbstractLinkedList/AbstractLinkedList");
17
+ var SingleLinkedNode_1 = require("./SingleLinkedNode");
18
+ var IsNotFoundException_1 = require("../../../exceptions/IsNotFoundException");
19
+ /**
20
+ * Linear data structure
21
+ * Each node has next
22
+ * Head's next node is tail
23
+ */
24
+ var SingleLinkedList = /** @class */ (function (_super) {
25
+ __extends(SingleLinkedList, _super);
26
+ /**
27
+ * @inheritDoc
28
+ */
29
+ function SingleLinkedList(capacity) {
30
+ var _this = _super.call(this, capacity) || this;
31
+ _this._head = null;
32
+ _this._tail = null;
33
+ return _this;
34
+ }
35
+ /**
36
+ * Find previous sibling of given node
37
+ */
38
+ SingleLinkedList.prototype.getPrevNode = function (node) {
39
+ var currentNode = this._tail;
40
+ while ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.next) !== node) {
41
+ currentNode = (currentNode === null || currentNode === void 0 ? void 0 : currentNode.next) || null;
42
+ }
43
+ return currentNode;
44
+ };
45
+ /**
46
+ * @inheritDoc
47
+ */
48
+ SingleLinkedList.prototype.createNode = function (value) {
49
+ return new SingleLinkedNode_1.default(value);
50
+ };
51
+ /**
52
+ * @inheritDoc
53
+ */
54
+ SingleLinkedList.prototype.insertNodeBetweenTwoNodesImpl = function (targetNode, leftNode, rightNode) {
55
+ targetNode.next = rightNode;
56
+ if (leftNode) {
57
+ leftNode.next = targetNode;
58
+ }
59
+ };
60
+ /**
61
+ * @inheritDoc
62
+ */
63
+ SingleLinkedList.prototype.deleteNodeImpl = function (node) {
64
+ this.getPrevNode(node).next = node.next;
65
+ node.next = null;
66
+ };
67
+ /**
68
+ * @inheritDoc
69
+ */
70
+ SingleLinkedList.prototype.popImpl = function () {
71
+ this._head = this.getPrevNode(this._tail);
72
+ };
73
+ /**
74
+ * @inheritDoc
75
+ */
76
+ SingleLinkedList.prototype.shiftImpl = function () {
77
+ var _a;
78
+ this._tail = ((_a = this._head) === null || _a === void 0 ? void 0 : _a.next) || null;
79
+ };
80
+ /**
81
+ * @inheritDoc
82
+ */
83
+ SingleLinkedList.prototype.reverse = function () {
84
+ var currentNode = this._tail;
85
+ var prevNode = this._head;
86
+ var index = 0;
87
+ while (index < this._length) {
88
+ var next = (currentNode === null || currentNode === void 0 ? void 0 : currentNode.next) || null;
89
+ if (currentNode) {
90
+ currentNode.next = prevNode;
91
+ }
92
+ index++;
93
+ prevNode = currentNode;
94
+ currentNode = next;
95
+ }
96
+ if (currentNode) {
97
+ this._head = currentNode;
98
+ this._tail = currentNode.next;
99
+ }
100
+ };
101
+ /**
102
+ * List iterator
103
+ */
104
+ SingleLinkedList.prototype.iterator = function (fromIndex) {
105
+ if (fromIndex === void 0) { fromIndex = 0; }
106
+ var head = this._head;
107
+ var activeNode = this.getNodeByIndex(fromIndex);
108
+ var iterator = {
109
+ /**
110
+ * @inheritDoc
111
+ */
112
+ current: function () {
113
+ return activeNode.data;
114
+ },
115
+ /**
116
+ * @inheritDoc
117
+ */
118
+ hasNext: function () {
119
+ return Boolean(activeNode.next) && activeNode !== head;
120
+ },
121
+ /**
122
+ * @inheritDoc
123
+ * @throws when next element does not exist
124
+ */
125
+ next: function () {
126
+ if (!iterator.hasNext()) {
127
+ throw new IsNotFoundException_1.default("Next element does not exist");
128
+ }
129
+ activeNode = activeNode.next;
130
+ return activeNode.data;
131
+ },
132
+ };
133
+ return iterator;
134
+ };
135
+ return SingleLinkedList;
136
+ }(AbstractLinkedList_1.default));
137
+ exports.default = SingleLinkedList;
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlTGlua2VkTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9TaW5nbGVMaW5rZWRMaXN0L1NpbmdsZUxpbmtlZExpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsK0VBQTBFO0FBQzFFLHVEQUFrRDtBQUNsRCwrRUFBMEU7QUFFMUU7Ozs7R0FJRztBQUNIO0lBQ1Usb0NBQXFCO0lBUTdCOztPQUVHO0lBQ0gsMEJBQW1CLFFBQWlCO1FBQXBDLFlBQ0Usa0JBQU0sUUFBUSxDQUFDLFNBR2hCO1FBRkMsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7O0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNLLHNDQUFXLEdBQW5CLFVBQ0UsSUFBZ0M7UUFFaEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixPQUFPLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLElBQUksTUFBSyxJQUFJLEVBQUU7WUFDakMsV0FBVyxHQUFHLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLElBQUksS0FBSSxJQUFJLENBQUM7U0FDekM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxxQ0FBVSxHQUFwQixVQUFxQixLQUFRO1FBQzNCLE9BQU8sSUFBSSwwQkFBZ0IsQ0FBSSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyx3REFBNkIsR0FBdkMsVUFDRSxVQUErQixFQUMvQixRQUE2QixFQUM3QixTQUE4QjtRQUU5QixVQUFVLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUU1QixJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsQ0FBQyxJQUFJLEdBQUcs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
@@ -0,0 +1,7 @@
1
+ import AbstractLinkedNode from "../AbstractLinkedList/AbstractLinkedNode";
2
+ export default class SingleLinkedNode<T> extends AbstractLinkedNode<T> {
3
+ /**
4
+ * @inheritDoc
5
+ */
6
+ constructor(data: T, next?: SingleLinkedNode<T> | null);
7
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ extendStatics(d, b);
11
+ function __() { this.constructor = d; }
12
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
+ };
14
+ })();
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ var AbstractLinkedNode_1 = require("../AbstractLinkedList/AbstractLinkedNode");
17
+ var SingleLinkedNode = /** @class */ (function (_super) {
18
+ __extends(SingleLinkedNode, _super);
19
+ /**
20
+ * @inheritDoc
21
+ */
22
+ function SingleLinkedNode(data, next) {
23
+ if (next === void 0) { next = null; }
24
+ return _super.call(this, data, next) || this;
25
+ }
26
+ return SingleLinkedNode;
27
+ }(AbstractLinkedNode_1.default));
28
+ exports.default = SingleLinkedNode;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlTGlua2VkTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0cnVjdHVyZXMvTGlua2VkTGlzdC9TaW5nbGVMaW5rZWRMaXN0L1NpbmdsZUxpbmtlZE5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0VBQTBFO0FBRTFFO0lBQWlELG9DQUFxQjtJQUNwRTs7T0FFRztJQUNILDBCQUFtQixJQUFPLEVBQUUsSUFBdUM7UUFBdkMscUJBQUEsRUFBQSxXQUF1QztlQUNqRSxrQkFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQUFQRCxDQUFpRCw0QkFBa0IsR0FPbEUifQ==
@@ -0,0 +1,83 @@
1
+ import IArrayFacade from "../../types/IArrayFacade";
2
+ /**
3
+ * Linear data structure
4
+ * Facade above array
5
+ * After reaching full array new pushed elements will be overwritten over old elements
6
+ */
7
+ export default class LoopedArray<T> implements IArrayFacade<T> {
8
+ private readonly _capacity;
9
+ private _realLength;
10
+ private _array;
11
+ /**
12
+ * Create empty instance
13
+ */
14
+ constructor(capacity: number);
15
+ /**
16
+ * Push into end
17
+ */
18
+ push(value: T): void;
19
+ /**
20
+ * Push into start
21
+ */
22
+ unshift(value: T): void;
23
+ /**
24
+ * Delete node from array's end
25
+ */
26
+ pop(): T;
27
+ /**
28
+ * Delete node from array's start
29
+ */
30
+ shift(): T;
31
+ /**
32
+ * Get head element data
33
+ */
34
+ peek(): T;
35
+ /**
36
+ * Get tail element data
37
+ */
38
+ peekFromStart(): T;
39
+ /**
40
+ * Get array element by index from start
41
+ */
42
+ peekByIndex(index: number): T;
43
+ /**
44
+ * Push from index
45
+ */
46
+ pushFromIndex(value: T, fromIndex: number): void;
47
+ /**
48
+ * Get elements as array
49
+ */
50
+ getAsArray(): Array<T>;
51
+ /**
52
+ * Check if element exists in array
53
+ */
54
+ has(item: T): boolean;
55
+ /**
56
+ * Is array empty
57
+ */
58
+ isEmpty(): boolean;
59
+ /**
60
+ * Is array full
61
+ */
62
+ isFull(): boolean;
63
+ /**
64
+ * List length
65
+ */
66
+ length(): number;
67
+ /**
68
+ * Remove all elements from array
69
+ */
70
+ clear(): void;
71
+ /**
72
+ * Delete node from array by index from start
73
+ */
74
+ deleteFromIndex(fromIndex: number): T;
75
+ /**
76
+ * Add elements to array from array
77
+ * */
78
+ pushFromArray(elements: Array<T>): void;
79
+ /**
80
+ * Reverse array nodes links and swap head with tail
81
+ */
82
+ reverse(): void;
83
+ }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var IllegalCapacityException_1 = require("../../exceptions/IllegalCapacityException");
4
+ var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
5
+ var IsEmptyException_1 = require("../../exceptions/IsEmptyException");
6
+ /**
7
+ * Linear data structure
8
+ * Facade above array
9
+ * After reaching full array new pushed elements will be overwritten over old elements
10
+ */
11
+ var LoopedArray = /** @class */ (function () {
12
+ /**
13
+ * Create empty instance
14
+ */
15
+ function LoopedArray(capacity) {
16
+ this._realLength = 0;
17
+ if (capacity <= 0) {
18
+ throw new IllegalCapacityException_1.default("Capacity must be larger than 0");
19
+ }
20
+ this._capacity = capacity;
21
+ this._array = new Array(0);
22
+ }
23
+ /**
24
+ * Push into end
25
+ */
26
+ LoopedArray.prototype.push = function (value) {
27
+ if (this._realLength % this._capacity === 0) {
28
+ this._array = new Array(0);
29
+ }
30
+ this._realLength++;
31
+ if (!this.isFull()) {
32
+ this._array.push(value);
33
+ }
34
+ else {
35
+ var indexToPush = (this._realLength % this._capacity) - 1;
36
+ this._array.splice(indexToPush, 1, value);
37
+ }
38
+ };
39
+ /**
40
+ * Push into start
41
+ */
42
+ LoopedArray.prototype.unshift = function (value) {
43
+ if (this._realLength % this._capacity === 0) {
44
+ this._array = new Array(0);
45
+ }
46
+ this._realLength++;
47
+ if (!this.isFull()) {
48
+ this._array.unshift(value);
49
+ }
50
+ else {
51
+ this._array.splice(this._capacity - 1);
52
+ this._array.unshift(value);
53
+ }
54
+ };
55
+ /**
56
+ * Delete node from array's end
57
+ */
58
+ LoopedArray.prototype.pop = function () {
59
+ if (this.isEmpty()) {
60
+ throw new IsEmptyException_1.default("cannot delete because array is empty");
61
+ }
62
+ this._realLength--;
63
+ var deletedItem = this._array.pop();
64
+ if (deletedItem === undefined) {
65
+ throw new IsNotFoundException_1.default("cannot delete last element because of it does not exists");
66
+ }
67
+ return deletedItem;
68
+ };
69
+ /**
70
+ * Delete node from array's start
71
+ */
72
+ LoopedArray.prototype.shift = function () {
73
+ if (this.isEmpty()) {
74
+ throw new IsEmptyException_1.default("cannot delete because array is empty");
75
+ }
76
+ this._realLength--;
77
+ var deletedItem = this._array.shift();
78
+ if (deletedItem === undefined) {
79
+ throw new IsNotFoundException_1.default("cannot delete first element because of it does not exists");
80
+ }
81
+ return deletedItem;
82
+ };
83
+ /**
84
+ * Get head element data
85
+ */
86
+ LoopedArray.prototype.peek = function () {
87
+ return this._array[this._array.length - 1];
88
+ };
89
+ /**
90
+ * Get tail element data
91
+ */
92
+ LoopedArray.prototype.peekFromStart = function () {
93
+ return this._array[0];
94
+ };
95
+ /**
96
+ * Get array element by index from start
97
+ */
98
+ LoopedArray.prototype.peekByIndex = function (index) {
99
+ return this._array[index];
100
+ };
101
+ /**
102
+ * Push from index
103
+ */
104
+ LoopedArray.prototype.pushFromIndex = function (value, fromIndex) {
105
+ this._array[fromIndex] = value;
106
+ };
107
+ /**
108
+ * Get elements as array
109
+ */
110
+ LoopedArray.prototype.getAsArray = function () {
111
+ return this._array;
112
+ };
113
+ /**
114
+ * Check if element exists in array
115
+ */
116
+ LoopedArray.prototype.has = function (item) {
117
+ return this._array.includes(item);
118
+ };
119
+ /**
120
+ * Is array empty
121
+ */
122
+ LoopedArray.prototype.isEmpty = function () {
123
+ return this._array.length === 0;
124
+ };
125
+ /**
126
+ * Is array full
127
+ */
128
+ LoopedArray.prototype.isFull = function () {
129
+ return this._array.length >= this._capacity;
130
+ };
131
+ /**
132
+ * List length
133
+ */
134
+ LoopedArray.prototype.length = function () {
135
+ return this._array.length;
136
+ };
137
+ /**
138
+ * Remove all elements from array
139
+ */
140
+ LoopedArray.prototype.clear = function () {
141
+ this._array = new Array(0);
142
+ };
143
+ /**
144
+ * Delete node from array by index from start
145
+ */
146
+ LoopedArray.prototype.deleteFromIndex = function (fromIndex) {
147
+ var deletedElement = this._array[fromIndex];
148
+ delete this._array[fromIndex];
149
+ return deletedElement;
150
+ };
151
+ /**
152
+ * Add elements to array from array
153
+ * */
154
+ LoopedArray.prototype.pushFromArray = function (elements) {
155
+ var _this = this;
156
+ elements.forEach(function (element) {
157
+ _this.push(element);
158
+ });
159
+ };
160
+ /**
161
+ * Reverse array nodes links and swap head with tail
162
+ */
163
+ LoopedArray.prototype.reverse = function () {
164
+ this._array = this._array.reverse();
165
+ };
166
+ return LoopedArray;
167
+ }());
168
+ exports.default = LoopedArray;
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9vcGVkQXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YS1zdHJ1Y3R1cmVzL0xvb3BlZEFycmF5L0xvb3BlZEFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esc0ZBQWlGO0FBQ2pGLDRFQUF1RTtBQUN2RSxzRUFBaUU7QUFFakU7Ozs7R0FJRztBQUNIO0lBS0U7O09BRUc7SUFDSCxxQkFBWSxRQUFnQjtRQU5wQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQU90QixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7WUFDakIsTUFBTSxJQUFJLGtDQUF3QixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNJLDBCQUFJLEdBQVgsVUFBWSxLQUFRO1FBQ2xCLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFJLENBQUMsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7SUFDSCxD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
@@ -0,0 +1,50 @@
1
+ import ILinearStorage from "../../types/ILinearStorage";
2
+ /**
3
+ * FIFO data structure
4
+ */
5
+ export default class Queue<T> implements ILinearStorage<T> {
6
+ private readonly _list;
7
+ /**
8
+ * Create a queue instance
9
+ */
10
+ constructor(capacity?: number);
11
+ /**
12
+ * Get first element in queue (without deleting)
13
+ * @throws when list is empty
14
+ */
15
+ peek(): T;
16
+ /**
17
+ * Add element to queue
18
+ * @throws when list is full
19
+ */
20
+ push(item: T): void;
21
+ /**
22
+ * Delete first element in queue
23
+ * @throws when list is empty
24
+ */
25
+ pop(): T;
26
+ /**
27
+ * Check if element exists in list
28
+ */
29
+ has(item: T): boolean;
30
+ /**
31
+ * Is queue empty
32
+ */
33
+ isEmpty(): boolean;
34
+ /**
35
+ * Is stack full
36
+ */
37
+ isFull(): boolean;
38
+ /**
39
+ * Remove all elements in queue
40
+ */
41
+ clear(): void;
42
+ /**
43
+ * Queue length
44
+ */
45
+ length(): number;
46
+ /**
47
+ * Reverse queue
48
+ */
49
+ reverse(): void;
50
+ }