@raikuxq/alg-ds 1.1.6 → 1.2.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/README.md +71 -88
- package/lib/app/algorithms/binary-search.d.ts +5 -0
- package/lib/app/algorithms/binary-search.js +27 -0
- package/lib/app/algorithms/factorial.d.ts +9 -0
- package/lib/app/algorithms/factorial.js +17 -0
- package/lib/app/algorithms/fibonacci.d.ts +9 -0
- package/lib/app/algorithms/fibonacci.js +17 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.d.ts +35 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +83 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorBFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.d.ts +28 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDFS.js +70 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.d.ts +32 -0
- package/lib/app/algorithms/graph/iterator/GraphIteratorDijkstra.js +97 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/BFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DFSIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.d.ts +6 -0
- package/lib/app/algorithms/graph/iterator-strategy/DijkstraIterationStrategy.js +13 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.d.ts +19 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyLists.js +28 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.d.ts +32 -0
- package/lib/app/algorithms/graph/presenter/presenterAdjacencyMatrix.js +48 -0
- package/lib/app/algorithms/graph/searching/hasPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
- package/lib/app/algorithms/graph/searching/shortestPath.d.ts +9 -0
- package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.d.ts +2 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
- package/lib/app/algorithms/memoize.d.ts +5 -0
- package/lib/app/algorithms/memoize.js +22 -0
- package/lib/app/algorithms/sorts/bubble-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/bubble-sort.js +23 -0
- package/lib/app/algorithms/sorts/insertion-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
- package/lib/app/algorithms/sorts/merge-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/merge-sort.js +61 -0
- package/lib/app/algorithms/sorts/quick-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/quick-sort.js +45 -0
- package/lib/app/algorithms/sorts/select-sort.d.ts +9 -0
- package/lib/app/algorithms/sorts/select-sort.js +20 -0
- package/lib/app/algorithms/transpose-matrix.d.ts +5 -0
- package/lib/app/algorithms/transpose-matrix.js +18 -0
- package/lib/app/constants.d.ts +2 -0
- package/lib/app/constants.js +6 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +15 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +53 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +60 -0
- package/lib/app/data-structures/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +36 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +13 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchNode.js +59 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +70 -0
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +271 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +16 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +70 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +57 -0
- package/lib/app/data-structures/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +235 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.d.ts +6 -0
- package/lib/app/data-structures/BinaryTree/_helpers/createBinaryTree.js +22 -0
- package/lib/app/data-structures/Graph/AbstractGraph.d.ts +84 -0
- package/lib/app/data-structures/Graph/AbstractGraph.js +143 -0
- package/lib/app/data-structures/Graph/DirectedGraph.d.ts +24 -0
- package/lib/app/data-structures/Graph/DirectedGraph.js +86 -0
- package/lib/app/data-structures/Graph/GraphEdge.d.ts +16 -0
- package/lib/app/data-structures/Graph/GraphEdge.js +43 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.d.ts +28 -0
- package/lib/app/data-structures/Graph/UndirectedGraph.js +103 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.d.ts +6 -0
- package/lib/app/data-structures/Graph/_helpers/createGraph.js +22 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.d.ts +7 -0
- package/lib/app/data-structures/Graph/_helpers/createGraphFromMatrix.js +42 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.d.ts +4 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
- package/lib/app/data-structures/HashTable/HashTable.d.ts +73 -0
- package/lib/app/data-structures/HashTable/HashTable.js +171 -0
- package/lib/app/data-structures/HashTable/HashTableNode.d.ts +11 -0
- package/lib/app/data-structures/HashTable/HashTableNode.js +39 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +125 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +241 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +20 -0
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +41 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +48 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedList.js +151 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +25 -0
- package/lib/app/data-structures/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +65 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +52 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedList.js +138 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +7 -0
- package/lib/app/data-structures/LinkedList/SingleLinkedList/SingleLinkedNode.js +29 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.d.ts +3 -0
- package/lib/app/data-structures/LinkedList/_helpers/createLinkedList.js +19 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.d.ts +83 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.js +169 -0
- package/lib/app/data-structures/Queue/Queue.d.ts +50 -0
- package/lib/app/data-structures/Queue/Queue.js +85 -0
- package/lib/app/data-structures/Stack/Stack.d.ts +50 -0
- package/lib/app/data-structures/Stack/Stack.js +85 -0
- package/lib/app/exceptions/CollectionIsEmptyException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsEmptyException.js +28 -0
- package/lib/app/exceptions/CollectionIsFullException.d.ts +4 -0
- package/lib/app/exceptions/CollectionIsFullException.js +28 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.d.ts +4 -0
- package/lib/app/exceptions/IndexOutOfBoundsException.js +28 -0
- package/lib/app/exceptions/IsAlreadyExistsException.d.ts +4 -0
- package/lib/app/exceptions/IsAlreadyExistsException.js +28 -0
- package/lib/app/exceptions/IsNotFoundException.d.ts +4 -0
- package/lib/app/exceptions/IsNotFoundException.js +28 -0
- package/lib/app/exceptions/ValueOutOfRangeException.d.ts +4 -0
- package/lib/app/exceptions/ValueOutOfRangeException.js +28 -0
- package/lib/app/exceptions/base/IllegalArgumentException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalArgumentException.js +27 -0
- package/lib/app/exceptions/base/IllegalStateException.d.ts +3 -0
- package/lib/app/exceptions/base/IllegalStateException.js +27 -0
- package/lib/app/types/EnumBinarySearchTreeType.d.ts +4 -0
- package/lib/app/types/EnumBinarySearchTreeType.js +9 -0
- package/lib/app/types/EnumGraphTraversalType.d.ts +5 -0
- package/lib/app/types/EnumGraphTraversalType.js +10 -0
- package/lib/app/types/EnumGraphType.d.ts +4 -0
- package/lib/app/types/EnumGraphType.js +9 -0
- package/lib/app/types/EnumLinkedListType.d.ts +4 -0
- package/lib/app/types/EnumLinkedListType.js +9 -0
- package/lib/app/types/EnumRandomGenerationFormat.d.ts +4 -0
- package/lib/app/types/EnumRandomGenerationFormat.js +9 -0
- package/lib/app/types/EnumSortType.d.ts +7 -0
- package/lib/app/types/EnumSortType.js +12 -0
- package/lib/app/types/EnumTreeTraversalType.d.ts +5 -0
- package/lib/app/types/EnumTreeTraversalType.js +10 -0
- package/lib/app/types/FnCompareTwo.d.ts +1 -0
- package/lib/app/types/FnCompareTwo.js +3 -0
- package/lib/app/types/FnToMemoize.d.ts +1 -0
- package/lib/app/types/FnToMemoize.js +3 -0
- package/lib/app/types/IArrayFacade.d.ts +4 -0
- package/lib/app/types/IArrayFacade.js +3 -0
- package/lib/app/types/IBiDirectIterable.d.ts +5 -0
- package/lib/app/types/IBiDirectIterable.js +3 -0
- package/lib/app/types/IBiDirectIterator.d.ts +11 -0
- package/lib/app/types/IBiDirectIterator.js +3 -0
- package/lib/app/types/IBinaryTree.d.ts +12 -0
- package/lib/app/types/IBinaryTree.js +3 -0
- package/lib/app/types/IConvertableToArray.d.ts +4 -0
- package/lib/app/types/IConvertableToArray.js +3 -0
- package/lib/app/types/IGraph.d.ts +14 -0
- package/lib/app/types/IGraph.js +3 -0
- package/lib/app/types/IGraphIterationStrategy.d.ts +5 -0
- package/lib/app/types/IGraphIterationStrategy.js +3 -0
- package/lib/app/types/IGraphIterator.d.ts +11 -0
- package/lib/app/types/IGraphIterator.js +3 -0
- package/lib/app/types/IIterable.d.ts +4 -0
- package/lib/app/types/IIterable.js +3 -0
- package/lib/app/types/IIterator.d.ts +14 -0
- package/lib/app/types/IIterator.js +3 -0
- package/lib/app/types/IKeyValueStorage.d.ts +8 -0
- package/lib/app/types/IKeyValueStorage.js +3 -0
- package/lib/app/types/ILinearStorage.d.ts +11 -0
- package/lib/app/types/ILinearStorage.js +3 -0
- package/lib/app/types/ILinearStorageRA.d.ts +13 -0
- package/lib/app/types/ILinearStorageRA.js +3 -0
- package/lib/app/types/ILinkedList.d.ts +4 -0
- package/lib/app/types/ILinkedList.js +3 -0
- package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
- package/lib/app/types/TypeArrayMatrix.js +3 -0
- package/lib/app/utils.d.ts +37 -0
- package/lib/app/utils.js +114 -0
- package/lib/exports/algorithms.d.ts +16 -0
- package/lib/exports/algorithms.js +36 -0
- package/lib/exports/constants.d.ts +2 -0
- package/lib/exports/constants.js +7 -0
- package/lib/exports/data-structures.d.ts +11 -0
- package/lib/exports/data-structures.js +24 -0
- package/lib/exports/helpers.d.ts +6 -0
- package/lib/exports/helpers.js +14 -0
- package/lib/exports/sorts.d.ts +6 -0
- package/lib/exports/sorts.js +14 -0
- package/lib/exports/types.d.ts +16 -0
- package/lib/exports/types.js +34 -0
- package/lib/exports/utils.d.ts +3 -0
- package/lib/exports/utils.js +14 -0
- package/lib/exports.d.ts +53 -0
- package/lib/exports.js +105 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +5 -0
- package/package.json +11 -6
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlTGlua2VkTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvU2luZ2xlTGlua2VkTGlzdC9TaW5nbGVMaW5rZWRMaXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUVBLCtFQUEwRTtBQUMxRSx1REFBa0Q7QUFDbEQsK0VBQTBFO0FBRTFFOzs7O0dBSUc7QUFDSDtJQUNVLG9DQUFxQjtJQVE3Qjs7T0FFRztJQUNILDBCQUFtQixRQUFpQjtRQUFwQyxZQUNFLGtCQUFNLFFBQVEsQ0FBQyxTQUdoQjtRQUZDLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLEtBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQ0FBVyxHQUFuQixVQUNFLElBQWdDO1FBRWhDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsT0FBTyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxJQUFJLE1BQUssSUFBSSxFQUFFO1lBQ2pDLFdBQVcsR0FBRyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxJQUFJLEtBQUksSUFBSSxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ08scUNBQVUsR0FBcEIsVUFBcUIsS0FBUTtRQUMzQixPQUFPLElBQUksMEJBQWdCLENBQUksS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ08sd0RBQTZCLEdBQXZDLFVBQ0UsVUFBK0IsRUFDL0IsUUFBNkIsRUFDN0IsU0FBOEI7UUFFOUIsVUFBVSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFFNUIsSUFBSSxRQUFRLEVBQUU7WUFDWixRQUFRLENBQUMsSUFB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
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2luZ2xlTGlua2VkTm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvU2luZ2xlTGlua2VkTGlzdC9TaW5nbGVMaW5rZWROb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtFQUEwRTtBQUUxRTtJQUFpRCxvQ0FBcUI7SUFDcEU7O09BRUc7SUFDSCwwQkFBbUIsSUFBTyxFQUFFLElBQXVDO1FBQXZDLHFCQUFBLEVBQUEsV0FBdUM7ZUFDakUsa0JBQU0sSUFBSSxFQUFFLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0gsdUJBQUM7QUFBRCxDQUFDLEFBUEQsQ0FBaUQsNEJBQWtCLEdBT2xFIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLinkedList = void 0;
|
|
4
|
+
var EnumLinkedListType_1 = require("../../../types/EnumLinkedListType");
|
|
5
|
+
var DoubleLinkedList_1 = require("../DoubleLinkedList/DoubleLinkedList");
|
|
6
|
+
var SingleLinkedList_1 = require("../SingleLinkedList/SingleLinkedList");
|
|
7
|
+
exports.createLinkedList = function (type, capacity) {
|
|
8
|
+
var linkedList;
|
|
9
|
+
switch (type) {
|
|
10
|
+
case EnumLinkedListType_1.EnumLinkedListType.DOUBLE:
|
|
11
|
+
linkedList = new DoubleLinkedList_1.default(capacity);
|
|
12
|
+
break;
|
|
13
|
+
case EnumLinkedListType_1.EnumLinkedListType.SINGLE:
|
|
14
|
+
linkedList = new SingleLinkedList_1.default(capacity);
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
return linkedList;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlTGlua2VkTGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGF0YS1zdHJ1Y3R1cmVzL0xpbmtlZExpc3QvX2hlbHBlcnMvY3JlYXRlTGlua2VkTGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3RUFBdUU7QUFDdkUseUVBQW9FO0FBQ3BFLHlFQUFvRTtBQUd2RCxRQUFBLGdCQUFnQixHQUFHLFVBQzlCLElBQXdCLEVBQ3hCLFFBQWlCO0lBRWpCLElBQUksVUFBMEIsQ0FBQztJQUUvQixRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssdUNBQWtCLENBQUMsTUFBTTtZQUM1QixVQUFVLEdBQUcsSUFBSSwwQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxNQUFNO1FBQ1IsS0FBSyx1Q0FBa0IsQ0FBQyxNQUFNO1lBQzVCLFVBQVUsR0FBRyxJQUFJLDBCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLE1BQU07S0FDVDtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQyJ9
|
|
@@ -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 ValueOutOfRangeException_1 = require("../../exceptions/ValueOutOfRangeException");
|
|
4
|
+
var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
|
|
5
|
+
var CollectionIsEmptyException_1 = require("../../exceptions/CollectionIsEmptyException");
|
|
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 ValueOutOfRangeException_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 CollectionIsEmptyException_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 CollectionIsEmptyException_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9vcGVkQXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtc3RydWN0dXJlcy9Mb29wZWRBcnJheS9Mb29wZWRBcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHNGQUFpRjtBQUNqRiw0RUFBdUU7QUFDdkUsMEZBQXFGO0FBRXJGOzs7O0dBSUc7QUFDSDtJQUtFOztPQUVHO0lBQ0gscUJBQVksUUFBZ0I7UUFOcEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFPdEIsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxrQ0FBd0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBSSxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSwwQkFBSSxHQUFYLFVBQVksS0FBUTtRQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBSSxDQUFDLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzND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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
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var DoubleLinkedList_1 = require("../LinkedList/DoubleLinkedList/DoubleLinkedList");
|
|
4
|
+
var CollectionIsEmptyException_1 = require("../../exceptions/CollectionIsEmptyException");
|
|
5
|
+
var CollectionIsFullException_1 = require("../../exceptions/CollectionIsFullException");
|
|
6
|
+
/**
|
|
7
|
+
* FIFO data structure
|
|
8
|
+
*/
|
|
9
|
+
var Queue = /** @class */ (function () {
|
|
10
|
+
/**
|
|
11
|
+
* Create a queue instance
|
|
12
|
+
*/
|
|
13
|
+
function Queue(capacity) {
|
|
14
|
+
this._list = new DoubleLinkedList_1.default(capacity);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get first element in queue (without deleting)
|
|
18
|
+
* @throws when list is empty
|
|
19
|
+
*/
|
|
20
|
+
Queue.prototype.peek = function () {
|
|
21
|
+
if (this.isEmpty()) {
|
|
22
|
+
throw new CollectionIsEmptyException_1.default("Cannot peek when list is empty");
|
|
23
|
+
}
|
|
24
|
+
return this._list.peek();
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Add element to queue
|
|
28
|
+
* @throws when list is full
|
|
29
|
+
*/
|
|
30
|
+
Queue.prototype.push = function (item) {
|
|
31
|
+
if (this._list.isFull()) {
|
|
32
|
+
throw new CollectionIsFullException_1.default("Cannot push when queue is full");
|
|
33
|
+
}
|
|
34
|
+
this._list.unshift(item);
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Delete first element in queue
|
|
38
|
+
* @throws when list is empty
|
|
39
|
+
*/
|
|
40
|
+
Queue.prototype.pop = function () {
|
|
41
|
+
if (this.isEmpty()) {
|
|
42
|
+
throw new CollectionIsEmptyException_1.default("Cannot pop when list is empty");
|
|
43
|
+
}
|
|
44
|
+
return this._list.pop();
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Check if element exists in list
|
|
48
|
+
*/
|
|
49
|
+
Queue.prototype.has = function (item) {
|
|
50
|
+
return this._list.has(item);
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Is queue empty
|
|
54
|
+
*/
|
|
55
|
+
Queue.prototype.isEmpty = function () {
|
|
56
|
+
return this._list.isEmpty();
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Is stack full
|
|
60
|
+
*/
|
|
61
|
+
Queue.prototype.isFull = function () {
|
|
62
|
+
return this._list.isFull();
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Remove all elements in queue
|
|
66
|
+
*/
|
|
67
|
+
Queue.prototype.clear = function () {
|
|
68
|
+
this._list.clear();
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Queue length
|
|
72
|
+
*/
|
|
73
|
+
Queue.prototype.length = function () {
|
|
74
|
+
return this._list.length();
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Reverse queue
|
|
78
|
+
*/
|
|
79
|
+
Queue.prototype.reverse = function () {
|
|
80
|
+
this._list.reverse();
|
|
81
|
+
};
|
|
82
|
+
return Queue;
|
|
83
|
+
}());
|
|
84
|
+
exports.default = Queue;
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2RhdGEtc3RydWN0dXJlcy9RdWV1ZS9RdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG9GQUErRTtBQUcvRSwwRkFBcUY7QUFDckYsd0ZBQW1GO0FBRW5GOztHQUVHO0FBQ0g7SUFHRTs7T0FFRztJQUNILGVBQW1CLFFBQWlCO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSwwQkFBZ0IsQ0FBSSxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQUksR0FBWDtRQUNFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxvQ0FBMEIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBSSxHQUFYLFVBQVksSUFBTztRQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLG1DQUF5QixDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksbUJBQUcsR0FBVjtRQUNFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxvQ0FBMEIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFHLEdBQVYsVUFBVyxJQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQU8sR0FBZDtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQkFBTSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFLLEdBQVo7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFNLEdBQWI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQU8sR0FBZDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNILFlBQUM7QUFBRCxDQUFDLEFBcEZELElBb0ZDIn0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import ILinearStorage from "../../types/ILinearStorage";
|
|
2
|
+
/**
|
|
3
|
+
* LIFO data structure
|
|
4
|
+
*/
|
|
5
|
+
export default class Stack<T> implements ILinearStorage<T> {
|
|
6
|
+
private readonly _list;
|
|
7
|
+
/**
|
|
8
|
+
* Create a stack instance
|
|
9
|
+
*/
|
|
10
|
+
constructor(capacity?: number);
|
|
11
|
+
/**
|
|
12
|
+
* Get stack top element
|
|
13
|
+
* @throws when list is empty
|
|
14
|
+
*/
|
|
15
|
+
peek(): T;
|
|
16
|
+
/**
|
|
17
|
+
* Add element to stack head
|
|
18
|
+
* @throws when list is full
|
|
19
|
+
*/
|
|
20
|
+
push(item: T): void;
|
|
21
|
+
/**
|
|
22
|
+
* Remove element from stack head
|
|
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 stack empty
|
|
32
|
+
*/
|
|
33
|
+
isEmpty(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Is stack full
|
|
36
|
+
*/
|
|
37
|
+
isFull(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Remove all elements in stack
|
|
40
|
+
*/
|
|
41
|
+
clear(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Queue length
|
|
44
|
+
*/
|
|
45
|
+
length(): number;
|
|
46
|
+
/**
|
|
47
|
+
* Reverse stack
|
|
48
|
+
*/
|
|
49
|
+
reverse(): void;
|
|
50
|
+
}
|