@raikuxq/alg-ds 1.1.7 → 1.2.2
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/{algorithms → app/algorithms}/binary-search.d.ts +0 -0
- package/lib/app/algorithms/binary-search.js +27 -0
- package/lib/{algorithms → app/algorithms}/factorial.d.ts +0 -0
- package/lib/{algorithms → app/algorithms}/factorial.js +1 -1
- package/lib/{algorithms → app/algorithms}/fibonacci.d.ts +0 -0
- package/lib/app/algorithms/fibonacci.js +17 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/AbstractGraphIterator.d.ts +4 -0
- package/lib/app/algorithms/graph/iterator/AbstractGraphIterator.js +87 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorBFS.d.ts +0 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorBFS.js +2 -2
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDFS.d.ts +0 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDFS.js +2 -2
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDijkstra.d.ts +0 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/iterator/GraphIteratorDijkstra.js +3 -5
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/BFSIterationStrategy.d.ts +0 -0
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/BFSIterationStrategy.js +1 -1
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DFSIterationStrategy.d.ts +0 -0
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DFSIterationStrategy.js +1 -1
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DijkstraIterationStrategy.d.ts +0 -0
- package/lib/{data-structures/Graph/strategy → app/algorithms/graph/iterator-strategy}/DijkstraIterationStrategy.js +1 -1
- package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyLists.d.ts +0 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyLists.js +1 -1
- package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyMatrix.d.ts +2 -2
- package/lib/{data-structures/Graph → app/algorithms/graph}/presenter/presenterAdjacencyMatrix.js +1 -1
- package/lib/{data-structures/Graph → app/algorithms/graph}/searching/hasPath.d.ts +3 -3
- package/lib/app/algorithms/graph/searching/hasPath.js +30 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/searching/shortestPath.d.ts +3 -3
- package/lib/app/algorithms/graph/searching/shortestPath.js +30 -0
- package/lib/{data-structures/Graph → app/algorithms/graph}/transposing/transposeDirectedGraph.d.ts +0 -0
- package/lib/app/algorithms/graph/transposing/transposeDirectedGraph.js +14 -0
- package/lib/{algorithms → app/algorithms}/memoize.d.ts +0 -0
- package/lib/{algorithms → app/algorithms}/memoize.js +1 -1
- package/lib/{algorithms → app/algorithms}/sorts/bubble-sort.d.ts +0 -0
- package/lib/{algorithms → app/algorithms}/sorts/bubble-sort.js +1 -1
- package/lib/{algorithms → app/algorithms}/sorts/insertion-sort.d.ts +0 -0
- package/lib/app/algorithms/sorts/insertion-sort.js +25 -0
- package/lib/{algorithms → app/algorithms}/sorts/merge-sort.d.ts +0 -0
- package/lib/app/algorithms/sorts/merge-sort.js +61 -0
- package/lib/{algorithms → app/algorithms}/sorts/quick-sort.d.ts +0 -0
- package/lib/{algorithms → app/algorithms}/sorts/quick-sort.js +1 -1
- package/lib/{algorithms → app/algorithms}/sorts/select-sort.d.ts +0 -0
- package/lib/{algorithms → app/algorithms}/sorts/select-sort.js +1 -1
- package/lib/app/algorithms/transpose-matrix.d.ts +6 -0
- package/lib/{algorithms → app/algorithms}/transpose-matrix.js +2 -1
- package/lib/{constants.d.ts → app/constants.d.ts} +0 -0
- package/lib/{constants.js → app/constants.js} +1 -1
- package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.d.ts +1 -1
- package/lib/{data-structures → app/data-structures}/BinaryTree/AbstractBinaryTree/AbstractBinaryTree.js +1 -2
- package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/BinaryTree/BinarySearchTree/BinarySearchTree.d.ts +6 -1
- package/lib/app/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +276 -0
- package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.d.ts +1 -0
- package/lib/{data-structures → app/data-structures}/BinaryTree/RandBinarySearchTree/RandBinarySearchTree.js +2 -1
- 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/{data-structures → app/data-structures}/Graph/AbstractGraph.d.ts +3 -3
- package/lib/{data-structures → app/data-structures}/Graph/AbstractGraph.js +4 -4
- package/lib/{data-structures → app/data-structures}/Graph/DirectedGraph.d.ts +3 -0
- package/lib/{data-structures → app/data-structures}/Graph/DirectedGraph.js +4 -1
- package/lib/{data-structures → app/data-structures}/Graph/GraphEdge.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/Graph/GraphEdge.js +1 -1
- package/lib/{data-structures → app/data-structures}/Graph/UndirectedGraph.d.ts +3 -0
- package/lib/{data-structures → app/data-structures}/Graph/UndirectedGraph.js +4 -1
- 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/{data-structures/Graph/demo → app/data-structures/Graph/_helpers}/generateRandomGraph.d.ts +0 -0
- package/lib/app/data-structures/Graph/_helpers/generateRandomGraph.js +67 -0
- package/lib/{data-structures → app/data-structures}/HashTable/HashTable.d.ts +4 -4
- package/lib/app/data-structures/HashTable/HashTable.js +171 -0
- package/lib/{data-structures → app/data-structures}/HashTable/HashTableNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/HashTable/HashTableNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedList.d.ts +17 -8
- package/lib/app/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +247 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/AbstractLinkedList/AbstractLinkedNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedList.d.ts +2 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedList.js +5 -3
- package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/DoubleLinkedList/DoubleLinkedNode.js +1 -1
- package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedList.d.ts +2 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedList.js +4 -2
- package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedNode.d.ts +0 -0
- package/lib/{data-structures → app/data-structures}/LinkedList/SingleLinkedList/SingleLinkedNode.js +1 -1
- 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/{data-structures → app/data-structures}/LoopedArray/LoopedArray.d.ts +3 -0
- package/lib/app/data-structures/LoopedArray/LoopedArray.js +165 -0
- package/lib/{data-structures → app/data-structures}/Queue/Queue.d.ts +3 -3
- package/lib/app/data-structures/Queue/Queue.js +85 -0
- package/lib/{data-structures → app/data-structures}/Stack/Stack.d.ts +3 -3
- package/lib/app/data-structures/Stack/Stack.js +85 -0
- package/lib/{exceptions/IsEmptyException.d.ts → app/exceptions/CollectionIsEmptyException.d.ts} +1 -1
- package/lib/{exceptions/IsFullException.js → app/exceptions/CollectionIsEmptyException.js} +7 -7
- package/lib/{exceptions/IsFullException.d.ts → app/exceptions/CollectionIsFullException.d.ts} +1 -1
- package/lib/{exceptions/IsEmptyException.js → app/exceptions/CollectionIsFullException.js} +7 -7
- package/lib/{exceptions → app/exceptions}/IndexOutOfBoundsException.d.ts +0 -0
- package/lib/{exceptions → app/exceptions}/IndexOutOfBoundsException.js +1 -1
- package/lib/{exceptions → app/exceptions}/IsAlreadyExistsException.d.ts +0 -0
- package/lib/{exceptions → app/exceptions}/IsAlreadyExistsException.js +1 -1
- package/lib/{exceptions → app/exceptions}/IsNotFoundException.d.ts +0 -0
- package/lib/{exceptions → app/exceptions}/IsNotFoundException.js +1 -1
- package/lib/{exceptions/IllegalCapacityException.d.ts → app/exceptions/ValueOutOfRangeException.d.ts} +1 -1
- package/lib/{exceptions/IllegalCapacityException.js → app/exceptions/ValueOutOfRangeException.js} +7 -7
- package/lib/{exceptions → app/exceptions}/base/IllegalArgumentException.d.ts +0 -0
- package/lib/{exceptions → app/exceptions}/base/IllegalArgumentException.js +1 -1
- package/lib/{exceptions → app/exceptions}/base/IllegalStateException.d.ts +0 -0
- package/lib/{exceptions → app/exceptions}/base/IllegalStateException.js +1 -1
- package/lib/{types → app/types}/EnumBinarySearchTreeType.d.ts +0 -0
- package/lib/{types → app/types}/EnumBinarySearchTreeType.js +1 -1
- 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/{types → app/types}/EnumGraphType.js +3 -3
- package/lib/{types → app/types}/EnumLinkedListType.d.ts +0 -0
- package/lib/{types → app/types}/EnumLinkedListType.js +1 -1
- package/lib/{types → app/types}/EnumRandomGenerationFormat.d.ts +2 -2
- package/lib/{types → app/types}/EnumRandomGenerationFormat.js +3 -3
- 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/{types → app/types}/FnCompareTwo.d.ts +0 -0
- package/lib/{types → app/types}/FnCompareTwo.js +1 -1
- package/lib/{types → app/types}/FnToMemoize.d.ts +0 -0
- package/lib/{types → app/types}/FnToMemoize.js +1 -1
- package/lib/{types → app/types}/IArrayFacade.d.ts +0 -0
- package/lib/{types → app/types}/IArrayFacade.js +1 -1
- package/lib/{types → app/types}/IBiDirectIterable.d.ts +0 -0
- package/lib/{types → app/types}/IBiDirectIterable.js +1 -1
- package/lib/{types → app/types}/IBiDirectIterator.d.ts +0 -0
- package/lib/{types → app/types}/IBiDirectIterator.js +1 -1
- package/lib/{types → app/types}/IBinaryTree.d.ts +0 -0
- package/lib/{types → app/types}/IBinaryTree.js +1 -1
- package/lib/{types → app/types}/IConvertableToArray.d.ts +0 -0
- package/lib/{types → app/types}/IConvertableToArray.js +1 -1
- package/lib/{types → app/types}/IGraph.d.ts +0 -0
- package/lib/{types → app/types}/IGraph.js +1 -1
- package/lib/{types → app/types}/IGraphIterationStrategy.d.ts +0 -0
- package/lib/{types → app/types}/IGraphIterationStrategy.js +1 -1
- package/lib/{types → app/types}/IGraphIterator.d.ts +0 -0
- package/lib/{types → app/types}/IGraphIterator.js +1 -1
- package/lib/{types → app/types}/IIterable.d.ts +0 -0
- package/lib/{types → app/types}/IIterable.js +1 -1
- package/lib/{types → app/types}/IIterator.d.ts +0 -0
- package/lib/{types → app/types}/IIterator.js +1 -1
- package/lib/{types → app/types}/IKeyValueStorage.d.ts +0 -0
- package/lib/{types → app/types}/IKeyValueStorage.js +1 -1
- package/lib/{types → app/types}/ILinearStorage.d.ts +0 -0
- package/lib/{types → app/types}/ILinearStorage.js +1 -1
- package/lib/{types → app/types}/ILinearStorageRA.d.ts +0 -0
- package/lib/{types → app/types}/ILinearStorageRA.js +1 -1
- package/lib/{types → app/types}/ILinkedList.d.ts +0 -0
- package/lib/{types → app/types}/ILinkedList.js +1 -1
- package/lib/app/types/TypeArrayMatrix.d.ts +1 -0
- package/lib/app/types/TypeArrayMatrix.js +3 -0
- package/lib/{utils.d.ts → app/utils.d.ts} +6 -2
- package/lib/{utils.js → app/utils.js} +12 -5
- package/lib/exports/algorithms.d.ts +15 -15
- package/lib/exports/algorithms.js +16 -16
- package/lib/exports/constants.d.ts +1 -1
- package/lib/exports/constants.js +2 -2
- package/lib/exports/data-structures.d.ts +10 -10
- package/lib/exports/data-structures.js +11 -11
- package/lib/exports/helpers.d.ts +5 -5
- package/lib/exports/helpers.js +6 -6
- package/lib/exports/sorts.d.ts +5 -5
- package/lib/exports/sorts.js +6 -6
- package/lib/exports/types.d.ts +16 -0
- package/lib/exports/types.js +34 -0
- package/lib/exports/utils.d.ts +2 -2
- package/lib/exports/utils.js +3 -3
- package/lib/exports.d.ts +47 -46
- package/lib/exports.js +51 -49
- package/lib/index.js +1 -2
- package/package.json +11 -6
- package/lib/algorithms/binary-search.js +0 -27
- package/lib/algorithms/fibonacci.js +0 -17
- package/lib/algorithms/sorts/insertion-sort.js +0 -25
- package/lib/algorithms/sorts/merge-sort.js +0 -61
- package/lib/algorithms/transpose-matrix.d.ts +0 -5
- package/lib/data-structures/BinaryTree/BinarySearchTree/BinarySearchTree.js +0 -271
- package/lib/data-structures/Graph/demo/generateRandomGraph.js +0 -66
- package/lib/data-structures/Graph/iterator/AbstractGraphIterator.js +0 -90
- package/lib/data-structures/Graph/searching/hasPath.js +0 -30
- package/lib/data-structures/Graph/searching/shortestPath.js +0 -30
- package/lib/data-structures/Graph/transposing/transposeDirectedGraph.js +0 -14
- package/lib/data-structures/HashTable/HashTable.js +0 -171
- package/lib/data-structures/LinkedList/AbstractLinkedList/AbstractLinkedList.js +0 -241
- package/lib/data-structures/LoopedArray/LoopedArray.js +0 -169
- package/lib/data-structures/Queue/Queue.js +0 -85
- package/lib/data-structures/Stack/Stack.js +0 -85
- package/lib/helpers/createBinaryTree.d.ts +0 -6
- package/lib/helpers/createBinaryTree.js +0 -22
- package/lib/helpers/createGraph.d.ts +0 -6
- package/lib/helpers/createGraph.js +0 -24
- package/lib/helpers/createGraphFromMatrix.d.ts +0 -7
- package/lib/helpers/createGraphFromMatrix.js +0 -42
- package/lib/helpers/createLinkedList.d.ts +0 -3
- package/lib/helpers/createLinkedList.js +0 -21
- package/lib/types/ArrayMatrix.d.ts +0 -1
- package/lib/types/ArrayMatrix.js +0 -3
- package/lib/types/EnumGraphType.d.ts +0 -4
- package/lib/types/EnumTreeTraversalType.d.ts +0 -5
- package/lib/types/EnumTreeTraversalType.js +0 -10
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var HashTableNode_1 = require("./HashTableNode");
|
|
4
|
-
var IllegalCapacityException_1 = require("../../exceptions/IllegalCapacityException");
|
|
5
|
-
var IsNotFoundException_1 = require("../../exceptions/IsNotFoundException");
|
|
6
|
-
/**
|
|
7
|
-
* Implementation of open addressing hash table using quadratic probing
|
|
8
|
-
*/
|
|
9
|
-
var HashTable = /** @class */ (function () {
|
|
10
|
-
/**
|
|
11
|
-
* Given init capacity size will be used
|
|
12
|
-
* @throws when initial capacity value is not larger than 0
|
|
13
|
-
*/
|
|
14
|
-
function HashTable(initialCapacity) {
|
|
15
|
-
if (initialCapacity === void 0) { initialCapacity = HashTable.DEFAULT_MAX_CAPACITY; }
|
|
16
|
-
this.storageCapacity = 0;
|
|
17
|
-
if (initialCapacity <= 0) {
|
|
18
|
-
throw new IllegalCapacityException_1.default("Size must be larger than 0");
|
|
19
|
-
}
|
|
20
|
-
this.maxCapacity = initialCapacity;
|
|
21
|
-
this.storage = new Array(this.maxCapacity).fill(null);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Main-hash function
|
|
25
|
-
*/
|
|
26
|
-
HashTable.prototype.hashFn = function (key, number) {
|
|
27
|
-
return ((this.innerHashFn(key) + 127 * number + 365 * number * number) %
|
|
28
|
-
this.maxCapacity);
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Helper-hash function
|
|
32
|
-
*/
|
|
33
|
-
HashTable.prototype.innerHashFn = function (key) {
|
|
34
|
-
var length = key.length;
|
|
35
|
-
if (length === 0) {
|
|
36
|
-
return 0;
|
|
37
|
-
}
|
|
38
|
-
var substring = key.substring(0, length - 1);
|
|
39
|
-
var symbol = key.charCodeAt(length - 1);
|
|
40
|
-
return (127 * this.innerHashFn(substring) + symbol) % this.maxCapacity;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Max capacity will be increased and storage will be overwritten
|
|
44
|
-
*/
|
|
45
|
-
HashTable.prototype.resizeStorage = function () {
|
|
46
|
-
this.maxCapacity *= 2;
|
|
47
|
-
var newArray = new Array(this.maxCapacity).fill(null);
|
|
48
|
-
for (var i = 0; i < this.storage.length; i++) {
|
|
49
|
-
var element = this.storage[i];
|
|
50
|
-
if (element != null) {
|
|
51
|
-
for (var j = 0; j < this.maxCapacity; j++) {
|
|
52
|
-
var newIndex = this.hashFn(element.key, j);
|
|
53
|
-
if (newArray[newIndex] == null) {
|
|
54
|
-
newArray[newIndex] = element;
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return newArray;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Will find node instance by its key
|
|
64
|
-
* @throws when element does not exist
|
|
65
|
-
*/
|
|
66
|
-
HashTable.prototype.findNode = function (key) {
|
|
67
|
-
for (var i = 0; i < this.maxCapacity; i++) {
|
|
68
|
-
var index = this.hashFn(key, i);
|
|
69
|
-
var node = this.storage[index];
|
|
70
|
-
if ((node === null || node === void 0 ? void 0 : node.key) === key) {
|
|
71
|
-
if (node === null || node === void 0 ? void 0 : node.isDeleted) {
|
|
72
|
-
break;
|
|
73
|
-
}
|
|
74
|
-
return node;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
throw new IsNotFoundException_1.default("Element does not exist");
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Will create new node instance and set in to storage by index
|
|
81
|
-
*/
|
|
82
|
-
HashTable.prototype.addNode = function (key, data, index) {
|
|
83
|
-
this.storage[index] = new HashTableNode_1.default(key, data);
|
|
84
|
-
this.storageCapacity++;
|
|
85
|
-
var loadFactor = this.storageCapacity / this.maxCapacity;
|
|
86
|
-
if (loadFactor >= HashTable.MAX_LOAD_FACTOR) {
|
|
87
|
-
this.storage = this.resizeStorage();
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
/**
|
|
91
|
-
* Will create new node instance and set in to storage by index
|
|
92
|
-
*/
|
|
93
|
-
HashTable.prototype.updateNode = function (data, index) {
|
|
94
|
-
this.storage[index].data = data;
|
|
95
|
-
this.storage[index].isDeleted = false;
|
|
96
|
-
};
|
|
97
|
-
/**
|
|
98
|
-
* Will insert item to hash table
|
|
99
|
-
*/
|
|
100
|
-
HashTable.prototype.set = function (key, data) {
|
|
101
|
-
for (var i = 0; i < this.maxCapacity; i++) {
|
|
102
|
-
var index = this.hashFn(key, i);
|
|
103
|
-
var node = this.storage[index];
|
|
104
|
-
var shouldAddNode = node === null;
|
|
105
|
-
if (shouldAddNode) {
|
|
106
|
-
this.addNode(key, data, index);
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
var shouldUpdateNode = node.key === key;
|
|
110
|
-
if (shouldUpdateNode) {
|
|
111
|
-
this.updateNode(data, index);
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
/**
|
|
117
|
-
* Will update item property isDeleted to false
|
|
118
|
-
* @throws when element does not exist
|
|
119
|
-
*/
|
|
120
|
-
HashTable.prototype.delete = function (key) {
|
|
121
|
-
for (var i = 0; i < this.maxCapacity; i++) {
|
|
122
|
-
var index = this.hashFn(key, i);
|
|
123
|
-
if (this.storage[index] !== null) {
|
|
124
|
-
this.storage[index].isDeleted = true;
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
throw new IsNotFoundException_1.default("Element does not exist");
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* Will find item in hash table
|
|
132
|
-
* @throws when element does not exist
|
|
133
|
-
*/
|
|
134
|
-
HashTable.prototype.get = function (key) {
|
|
135
|
-
return this.findNode(key).data;
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* Check if node with given key exists
|
|
139
|
-
*/
|
|
140
|
-
HashTable.prototype.has = function (key) {
|
|
141
|
-
try {
|
|
142
|
-
return Boolean(this.findNode(key));
|
|
143
|
-
}
|
|
144
|
-
catch (e) {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
/**
|
|
149
|
-
* Added elements count
|
|
150
|
-
*/
|
|
151
|
-
HashTable.prototype.length = function () {
|
|
152
|
-
var actualItems = this.storage.filter(function (item) {
|
|
153
|
-
return item !== null && !item.isDeleted;
|
|
154
|
-
});
|
|
155
|
-
return actualItems.length;
|
|
156
|
-
};
|
|
157
|
-
/**
|
|
158
|
-
* Will overwrite storage with array of null elements
|
|
159
|
-
*/
|
|
160
|
-
HashTable.prototype.clear = function () {
|
|
161
|
-
this.storage = new Array(HashTable.DEFAULT_MAX_CAPACITY).fill(null);
|
|
162
|
-
};
|
|
163
|
-
/**
|
|
164
|
-
Constants
|
|
165
|
-
*/
|
|
166
|
-
HashTable.DEFAULT_MAX_CAPACITY = 100;
|
|
167
|
-
HashTable.MAX_LOAD_FACTOR = 0.5;
|
|
168
|
-
return HashTable;
|
|
169
|
-
}());
|
|
170
|
-
exports.default = HashTable;
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFzaFRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9IYXNoVGFibGUvSGFzaFRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsaURBQTRDO0FBQzVDLHNGQUFpRjtBQUNqRiw0RUFBdUU7QUFFdkU7O0dBRUc7QUFDSDtJQWNFOzs7T0FHRztJQUNILG1CQUFtQixlQUF3RDtRQUF4RCxnQ0FBQSxFQUFBLGtCQUEwQixTQUFTLENBQUMsb0JBQW9CO1FBTm5FLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBTzFCLElBQUksZUFBZSxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLElBQUksa0NBQXdCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUNsRTtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSywwQkFBTSxHQUFkLFVBQWUsR0FBVyxFQUFFLE1BQWM7UUFDeEMsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQzlELElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSywrQkFBVyxHQUFuQixVQUFvQixHQUFXO1FBQzdCLElBQU0sTUFBTSxHQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFbEMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFDRCxJQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFN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
|
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var IllegalCapacityException_1 = require("../../../exceptions/IllegalCapacityException");
|
|
4
|
-
var IsFullException_1 = require("../../../exceptions/IsFullException");
|
|
5
|
-
var IsEmptyException_1 = require("../../../exceptions/IsEmptyException");
|
|
6
|
-
var IndexOutOfBoundsException_1 = require("../../../exceptions/IndexOutOfBoundsException");
|
|
7
|
-
var AbstractLinkedList = /** @class */ (function () {
|
|
8
|
-
/**
|
|
9
|
-
* Create empty instance
|
|
10
|
-
*/
|
|
11
|
-
function AbstractLinkedList(capacity) {
|
|
12
|
-
this._capacity = AbstractLinkedList.calculateCapacity(capacity);
|
|
13
|
-
this._head = null;
|
|
14
|
-
this._tail = null;
|
|
15
|
-
this._length = 0;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Will calculate real capacity value
|
|
19
|
-
* @throws when capacity <= 0
|
|
20
|
-
*/
|
|
21
|
-
AbstractLinkedList.calculateCapacity = function (capacity) {
|
|
22
|
-
if (capacity === undefined) {
|
|
23
|
-
return Number.MAX_VALUE;
|
|
24
|
-
}
|
|
25
|
-
if (capacity <= 0) {
|
|
26
|
-
throw new IllegalCapacityException_1.default("Capacity must be larger than 0");
|
|
27
|
-
}
|
|
28
|
-
return capacity;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Will insert node between nodeLeft and nodeRight
|
|
32
|
-
* @throws when list is full
|
|
33
|
-
*/
|
|
34
|
-
AbstractLinkedList.prototype.insertNodeBetweenTwoNodes = function (targetNode, leftNode, rightNode) {
|
|
35
|
-
if (this.isFull()) {
|
|
36
|
-
throw new IsFullException_1.default("List is full, no more space available");
|
|
37
|
-
}
|
|
38
|
-
if (this._head === null) {
|
|
39
|
-
this._head = targetNode;
|
|
40
|
-
}
|
|
41
|
-
if (this._tail === null) {
|
|
42
|
-
this._tail = targetNode;
|
|
43
|
-
}
|
|
44
|
-
if (!leftNode) {
|
|
45
|
-
leftNode = this._tail;
|
|
46
|
-
}
|
|
47
|
-
if (!rightNode) {
|
|
48
|
-
rightNode = this._head;
|
|
49
|
-
}
|
|
50
|
-
this.insertNodeBetweenTwoNodesImpl(targetNode, leftNode, rightNode);
|
|
51
|
-
this._length++;
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Will remove the node from its neighbors nodes links
|
|
55
|
-
* @throws when node does not exist
|
|
56
|
-
*/
|
|
57
|
-
AbstractLinkedList.prototype.deleteNode = function (node) {
|
|
58
|
-
this.deleteNodeImpl(node);
|
|
59
|
-
this._length--;
|
|
60
|
-
if (this.isEmpty()) {
|
|
61
|
-
this.clear();
|
|
62
|
-
}
|
|
63
|
-
return node;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Will find node by its index
|
|
67
|
-
* @throws when node was not found
|
|
68
|
-
*/
|
|
69
|
-
AbstractLinkedList.prototype.getNodeByIndex = function (index) {
|
|
70
|
-
var isIndexNotInRange = index < 0 || index > this._length;
|
|
71
|
-
if (this.isEmpty()) {
|
|
72
|
-
throw new IsEmptyException_1.default("List is empty");
|
|
73
|
-
}
|
|
74
|
-
if (isIndexNotInRange) {
|
|
75
|
-
throw new IndexOutOfBoundsException_1.default("Index exceed list length");
|
|
76
|
-
}
|
|
77
|
-
var currentNode = this._tail;
|
|
78
|
-
var counter = 0;
|
|
79
|
-
while (currentNode && counter < index) {
|
|
80
|
-
currentNode = currentNode.next;
|
|
81
|
-
counter++;
|
|
82
|
-
}
|
|
83
|
-
return currentNode;
|
|
84
|
-
};
|
|
85
|
-
/**
|
|
86
|
-
* Push into start
|
|
87
|
-
*/
|
|
88
|
-
AbstractLinkedList.prototype.unshift = function (value) {
|
|
89
|
-
var node = this.createNode(value);
|
|
90
|
-
this.insertNodeBetweenTwoNodes(node, this._head, this._tail);
|
|
91
|
-
this._tail = node;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Push into end
|
|
95
|
-
*/
|
|
96
|
-
AbstractLinkedList.prototype.push = function (value) {
|
|
97
|
-
var node = this.createNode(value);
|
|
98
|
-
this.insertNodeBetweenTwoNodes(node, this._head, this._tail);
|
|
99
|
-
this._head = node;
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* Push from index
|
|
103
|
-
*/
|
|
104
|
-
AbstractLinkedList.prototype.pushFromIndex = function (value, fromIndex) {
|
|
105
|
-
var isIndexNotInRange = fromIndex < 0 || fromIndex > this._length;
|
|
106
|
-
var shouldPushAsFirst = this.isEmpty() && fromIndex === 0;
|
|
107
|
-
if (isIndexNotInRange) {
|
|
108
|
-
throw new IndexOutOfBoundsException_1.default("index must be in range between 0 and list length");
|
|
109
|
-
}
|
|
110
|
-
if (shouldPushAsFirst) {
|
|
111
|
-
this.push(value);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
var node = this.createNode(value);
|
|
115
|
-
var nodeLeft = this.getNodeByIndex(fromIndex - 1);
|
|
116
|
-
var nodeRight = this.getNodeByIndex(fromIndex);
|
|
117
|
-
this.insertNodeBetweenTwoNodes(node, nodeLeft, nodeRight);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* Delete node from list's end
|
|
122
|
-
*/
|
|
123
|
-
AbstractLinkedList.prototype.pop = function () {
|
|
124
|
-
if (this.isEmpty() || this._head === null) {
|
|
125
|
-
throw new IsEmptyException_1.default("cannot delete because list is empty");
|
|
126
|
-
}
|
|
127
|
-
var deletedNode = this.deleteNode(this._head);
|
|
128
|
-
this.popImpl();
|
|
129
|
-
return deletedNode.data;
|
|
130
|
-
};
|
|
131
|
-
/**
|
|
132
|
-
* Delete node from list's start and get its data
|
|
133
|
-
*/
|
|
134
|
-
AbstractLinkedList.prototype.shift = function () {
|
|
135
|
-
if (this.isEmpty() || this._tail === null) {
|
|
136
|
-
throw new IsEmptyException_1.default("cannot delete because list is empty");
|
|
137
|
-
}
|
|
138
|
-
var deletedNode = this.deleteNode(this._tail);
|
|
139
|
-
this.shiftImpl();
|
|
140
|
-
return deletedNode.data;
|
|
141
|
-
};
|
|
142
|
-
/**
|
|
143
|
-
* Delete node from list by index from start
|
|
144
|
-
*/
|
|
145
|
-
AbstractLinkedList.prototype.deleteFromIndex = function (fromIndex) {
|
|
146
|
-
var nodeToDelete = this.getNodeByIndex(fromIndex);
|
|
147
|
-
var deletedNode = this.deleteNode(nodeToDelete);
|
|
148
|
-
return deletedNode.data;
|
|
149
|
-
};
|
|
150
|
-
/**
|
|
151
|
-
* List length
|
|
152
|
-
*/
|
|
153
|
-
AbstractLinkedList.prototype.length = function () {
|
|
154
|
-
return this._length;
|
|
155
|
-
};
|
|
156
|
-
/**
|
|
157
|
-
* Is list empty
|
|
158
|
-
*/
|
|
159
|
-
AbstractLinkedList.prototype.isEmpty = function () {
|
|
160
|
-
return this._length === 0;
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
163
|
-
* Is list full
|
|
164
|
-
*/
|
|
165
|
-
AbstractLinkedList.prototype.isFull = function () {
|
|
166
|
-
return this._length >= this._capacity;
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Check if element exists in list
|
|
170
|
-
*/
|
|
171
|
-
AbstractLinkedList.prototype.has = function (item) {
|
|
172
|
-
return this.getAsArray().includes(item);
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* Get head element data
|
|
176
|
-
* @throws when head does not exist
|
|
177
|
-
*/
|
|
178
|
-
AbstractLinkedList.prototype.peek = function () {
|
|
179
|
-
if (this.isEmpty() || !this._head) {
|
|
180
|
-
throw new IsEmptyException_1.default("head does not exist");
|
|
181
|
-
}
|
|
182
|
-
return this._head.data;
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* Get tail element data
|
|
186
|
-
* @throws when tail does not exists
|
|
187
|
-
*/
|
|
188
|
-
AbstractLinkedList.prototype.peekFromStart = function () {
|
|
189
|
-
if (this.isEmpty() || !this._tail) {
|
|
190
|
-
throw new IsEmptyException_1.default("tail does not exist");
|
|
191
|
-
}
|
|
192
|
-
return this._tail.data;
|
|
193
|
-
};
|
|
194
|
-
/**
|
|
195
|
-
* Get list element by index from start
|
|
196
|
-
* @throws when element does not exist
|
|
197
|
-
*/
|
|
198
|
-
AbstractLinkedList.prototype.peekByIndex = function (index) {
|
|
199
|
-
var node = this.getNodeByIndex(index);
|
|
200
|
-
return node.data;
|
|
201
|
-
};
|
|
202
|
-
/**
|
|
203
|
-
* Remove all elements from list
|
|
204
|
-
*/
|
|
205
|
-
AbstractLinkedList.prototype.clear = function () {
|
|
206
|
-
this._head = null;
|
|
207
|
-
this._tail = null;
|
|
208
|
-
this._length = 0;
|
|
209
|
-
};
|
|
210
|
-
/**
|
|
211
|
-
* Get elements as an array
|
|
212
|
-
*/
|
|
213
|
-
AbstractLinkedList.prototype.getAsArray = function () {
|
|
214
|
-
var array = [];
|
|
215
|
-
var currentNode = this._tail;
|
|
216
|
-
var counter = 0;
|
|
217
|
-
while (currentNode && counter < this._length) {
|
|
218
|
-
if (currentNode)
|
|
219
|
-
array.push(currentNode.data);
|
|
220
|
-
currentNode = currentNode.next;
|
|
221
|
-
counter++;
|
|
222
|
-
}
|
|
223
|
-
return array;
|
|
224
|
-
};
|
|
225
|
-
/**
|
|
226
|
-
* Add elements to list from array
|
|
227
|
-
* @throws when list is full
|
|
228
|
-
* */
|
|
229
|
-
AbstractLinkedList.prototype.pushFromArray = function (elements) {
|
|
230
|
-
var _this = this;
|
|
231
|
-
elements.forEach(function (element) {
|
|
232
|
-
if (_this.isFull()) {
|
|
233
|
-
throw new IsFullException_1.default("List is full, no more space available");
|
|
234
|
-
}
|
|
235
|
-
_this.push(element);
|
|
236
|
-
});
|
|
237
|
-
};
|
|
238
|
-
return AbstractLinkedList;
|
|
239
|
-
}());
|
|
240
|
-
exports.default = AbstractLinkedList;
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RMaW5rZWRMaXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RydWN0dXJlcy9MaW5rZWRMaXN0L0Fic3RyYWN0TGlua2VkTGlzdC9BYnN0cmFjdExpbmtlZExpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSx5RkFBb0Y7QUFDcEYsdUVBQWtFO0FBQ2xFLHlFQUFvRTtBQUNwRSwyRkFBc0Y7QUFFdEY7SUFNRTs7T0FFRztJQUNILDRCQUFzQixRQUFpQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDWSxvQ0FBaUIsR0FBaEMsVUFBaUMsUUFBaUI7UUFDaEQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQzFCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUN6QjtRQUNELElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtZQUNqQixNQUFNLElBQUksa0NBQXdCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUN0RTtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxzREFBeUIsR0FBakMsVUFDRSxVQUFpQyxFQUNqQyxRQUFzQyxFQUN0QyxTQUF1QztRQUV2QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQixNQUFNLElBQUkseUJBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FB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
|
|
@@ -1,169 +0,0 @@
|
|
|
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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
|