nlptoolkit-datastructure 1.0.0 → 1.0.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/dist/Stack.d.ts +7 -0
- package/dist/Stack.js +35 -0
- package/dist/Stack.js.map +1 -0
- package/dist/heap/Heap.d.ts +13 -0
- package/dist/heap/Heap.js +74 -0
- package/dist/heap/Heap.js.map +1 -0
- package/dist/heap/HeapNode.d.ts +5 -0
- package/dist/heap/HeapNode.js +23 -0
- package/dist/heap/HeapNode.js.map +1 -0
- package/dist/heap/MaxHeap.d.ts +5 -0
- package/dist/heap/MaxHeap.js +24 -0
- package/dist/heap/MaxHeap.js.map +1 -0
- package/dist/heap/MinHeap.d.ts +5 -0
- package/dist/heap/MinHeap.js +24 -0
- package/dist/heap/MinHeap.js.map +1 -0
- package/dist/tree/AvlTree.d.ts +12 -0
- package/dist/tree/AvlTree.js +107 -0
- package/dist/tree/AvlTree.js.map +1 -0
- package/dist/tree/AvlTreeNode.d.ts +5 -0
- package/dist/tree/AvlTreeNode.js +22 -0
- package/dist/tree/AvlTreeNode.js.map +1 -0
- package/dist/tree/BTree.d.ts +9 -0
- package/dist/tree/BTree.js +58 -0
- package/dist/tree/BTree.js.map +1 -0
- package/dist/tree/BTreeNode.d.ts +15 -0
- package/dist/tree/BTreeNode.js +122 -0
- package/dist/tree/BTreeNode.js.map +1 -0
- package/dist/tree/Tree.d.ts +10 -0
- package/dist/tree/Tree.js +69 -0
- package/dist/tree/Tree.js.map +1 -0
- package/dist/tree/TreeNode.d.ts +6 -0
- package/dist/tree/TreeNode.js +22 -0
- package/dist/tree/TreeNode.js.map +1 -0
- package/index.js +8 -1
- package/package.json +1 -1
- package/source/Stack.ts +26 -0
- package/source/heap/Heap.ts +73 -0
- package/source/heap/HeapNode.ts +13 -0
- package/source/heap/MaxHeap.ts +14 -0
- package/source/heap/MinHeap.ts +13 -0
- package/source/tree/AvlTree.ts +97 -0
- package/source/tree/AvlTreeNode.ts +12 -0
- package/source/tree/BTree.ts +50 -0
- package/source/tree/BTreeNode.ts +116 -0
- package/source/tree/Tree.ts +58 -0
- package/source/tree/TreeNode.ts +11 -0
- package/tests/CounterHashMapTest.ts +1 -1
- package/tests/HeapTest.ts +40 -0
- package/tests/LRUCacheTest.ts +1 -1
- package/tests/TreeTest.ts +47 -0
package/dist/Stack.d.ts
ADDED
package/dist/Stack.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Stack = void 0;
|
|
13
|
+
class Stack {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.list = [];
|
|
16
|
+
}
|
|
17
|
+
push(item) {
|
|
18
|
+
this.list.push(item);
|
|
19
|
+
}
|
|
20
|
+
pop() {
|
|
21
|
+
let item = this.list.pop();
|
|
22
|
+
if (item == undefined) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return item;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
isEmpty() {
|
|
30
|
+
return this.list.length == 0;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.Stack = Stack;
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=Stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../source/Stack.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,MAAa,KAAK;QAId;YAFQ,SAAI,GAAc,EAAE,CAAA;QAG5B,CAAC;QAEM,IAAI,CAAC,IAAO;YACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAEM,GAAG;YACN,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YAC1B,IAAI,IAAI,IAAI,SAAS,EAAC;gBAClB,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,OAAO,IAAI,CAAA;aACd;QACL,CAAC;QAEM,OAAO;YACV,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChC,CAAC;KAGJ;IAzBD,sBAyBC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class Heap<T> {
|
|
2
|
+
private readonly array;
|
|
3
|
+
protected comparator: <T>(item1: T, item2: T) => number;
|
|
4
|
+
private count;
|
|
5
|
+
constructor(N: number, comparator: <T>(item1: T, item2: T) => number);
|
|
6
|
+
compare(data1: T, data2: T): number;
|
|
7
|
+
isEmpty(): boolean;
|
|
8
|
+
private swapNode;
|
|
9
|
+
protected percolateDown(no: number): void;
|
|
10
|
+
protected percolateUp(no: number): void;
|
|
11
|
+
delete(): T;
|
|
12
|
+
insert(data: T): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./HeapNode"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Heap = void 0;
|
|
13
|
+
const HeapNode_1 = require("./HeapNode");
|
|
14
|
+
class Heap {
|
|
15
|
+
constructor(N, comparator) {
|
|
16
|
+
this.comparator = comparator;
|
|
17
|
+
this.array = new Array();
|
|
18
|
+
this.count = 0;
|
|
19
|
+
for (let i = 0; i < N; i++) {
|
|
20
|
+
this.array.push();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
compare(data1, data2) {
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
isEmpty() {
|
|
27
|
+
return this.count == 0;
|
|
28
|
+
}
|
|
29
|
+
swapNode(index1, index2) {
|
|
30
|
+
let tmp = this.array[index1];
|
|
31
|
+
this.array[index1] = this.array[index2];
|
|
32
|
+
this.array[index2] = tmp;
|
|
33
|
+
}
|
|
34
|
+
percolateDown(no) {
|
|
35
|
+
let left = 2 * no + 1;
|
|
36
|
+
let right = 2 * no + 2;
|
|
37
|
+
while ((left < this.count && this.compare(this.array[no].getData(), this.array[left].getData()) < 0) ||
|
|
38
|
+
(right < this.count && this.compare(this.array[no].getData(), this.array[right].getData()) < 0)) {
|
|
39
|
+
if (right >= this.count || this.compare(this.array[left].getData(), this.array[right].getData()) > 0) {
|
|
40
|
+
this.swapNode(no, left);
|
|
41
|
+
no = left;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.swapNode(no, right);
|
|
45
|
+
no = right;
|
|
46
|
+
}
|
|
47
|
+
left = 2 * no + 1;
|
|
48
|
+
right = 2 * no + 2;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
percolateUp(no) {
|
|
52
|
+
let parent = Math.floor((no - 1) / 2);
|
|
53
|
+
while (parent >= 0 && this.compare(this.array[parent].getData(), this.array[no].getData()) < 0) {
|
|
54
|
+
this.swapNode(parent, no);
|
|
55
|
+
no = parent;
|
|
56
|
+
parent = Math.floor((no - 1) / 2);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
delete() {
|
|
60
|
+
let tmp = this.array[0];
|
|
61
|
+
this.array[0] = this.array[this.count - 1];
|
|
62
|
+
this.percolateDown(0);
|
|
63
|
+
this.count = this.count - 1;
|
|
64
|
+
return tmp.getData();
|
|
65
|
+
}
|
|
66
|
+
insert(data) {
|
|
67
|
+
this.count = this.count + 1;
|
|
68
|
+
this.array[this.count - 1] = new HeapNode_1.HeapNode(data);
|
|
69
|
+
this.percolateUp(this.count - 1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.Heap = Heap;
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=Heap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Heap.js","sourceRoot":"","sources":["../../source/heap/Heap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HeapNode = void 0;
|
|
13
|
+
class HeapNode {
|
|
14
|
+
constructor(data) {
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
getData() {
|
|
18
|
+
return this.data;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.HeapNode = HeapNode;
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=HeapNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeapNode.js","sourceRoot":"","sources":["../../source/heap/HeapNode.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,MAAa,QAAQ;QAIjB,YAAY,IAAO;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QACpB,CAAC;QAEM,OAAO;YACV,OAAO,IAAI,CAAC,IAAI,CAAA;QACpB,CAAC;KAEJ;IAZD,4BAYC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./Heap"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MaxHeap = void 0;
|
|
13
|
+
const Heap_1 = require("./Heap");
|
|
14
|
+
class MaxHeap extends Heap_1.Heap {
|
|
15
|
+
constructor(N, comparator) {
|
|
16
|
+
super(N, comparator);
|
|
17
|
+
}
|
|
18
|
+
compare(data1, data2) {
|
|
19
|
+
return this.comparator(data1, data2);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.MaxHeap = MaxHeap;
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=MaxHeap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaxHeap.js","sourceRoot":"","sources":["../../source/heap/MaxHeap.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,iCAA4B;IAG5B,MAAa,OAAW,SAAQ,WAAO;QAEnC,YAAY,CAAS,EAAE,UAA6C;YAChE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,CAAC,KAAQ,EAAE,KAAQ;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;KAEJ;IAVD,0BAUC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./Heap"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MinHeap = void 0;
|
|
13
|
+
const Heap_1 = require("./Heap");
|
|
14
|
+
class MinHeap extends Heap_1.Heap {
|
|
15
|
+
constructor(N, comparator) {
|
|
16
|
+
super(N, comparator);
|
|
17
|
+
}
|
|
18
|
+
compare(data1, data2) {
|
|
19
|
+
return -this.comparator(data1, data2);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.MinHeap = MinHeap;
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=MinHeap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinHeap.js","sourceRoot":"","sources":["../../source/heap/MinHeap.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,iCAA4B;IAE5B,MAAa,OAAW,SAAQ,WAAO;QAEnC,YAAY,CAAS,EAAE,UAA6C;YAChE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,CAAC,KAAQ,EAAE,KAAQ;YACtB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACzC,CAAC;KAEJ;IAVD,0BAUC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Tree } from "./Tree";
|
|
2
|
+
import { AvlTreeNode } from "./AvlTreeNode";
|
|
3
|
+
export declare class AvlTree<T> extends Tree<T> {
|
|
4
|
+
constructor(comparator: <T>(item1: T, item2: T) => number);
|
|
5
|
+
height(d: AvlTreeNode<T>): number;
|
|
6
|
+
private rotateLeft;
|
|
7
|
+
private rotateRight;
|
|
8
|
+
private doubleRotateLeft;
|
|
9
|
+
private doubleRotateRight;
|
|
10
|
+
insert(node: AvlTreeNode<T>): void;
|
|
11
|
+
insertData(item: T): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./Tree", "./AvlTreeNode", "../Stack"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AvlTree = void 0;
|
|
13
|
+
const Tree_1 = require("./Tree");
|
|
14
|
+
const AvlTreeNode_1 = require("./AvlTreeNode");
|
|
15
|
+
const Stack_1 = require("../Stack");
|
|
16
|
+
class AvlTree extends Tree_1.Tree {
|
|
17
|
+
constructor(comparator) {
|
|
18
|
+
super(comparator);
|
|
19
|
+
}
|
|
20
|
+
height(d) {
|
|
21
|
+
if (d == null) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return d.height;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
rotateLeft(k2) {
|
|
29
|
+
let k1 = k2.left;
|
|
30
|
+
k2.left = k1.right;
|
|
31
|
+
k1.right = k2;
|
|
32
|
+
k2.height = Math.max(this.height(k2.left), this.height(k2.right)) + 1;
|
|
33
|
+
k1.height = Math.max(this.height(k1.left), k1.right.height) + 1;
|
|
34
|
+
return k1;
|
|
35
|
+
}
|
|
36
|
+
rotateRight(k1) {
|
|
37
|
+
let k2 = k1.right;
|
|
38
|
+
k1.right = k2.left;
|
|
39
|
+
k2.left = k1;
|
|
40
|
+
k2.height = Math.max(k2.left.height, this.height(k2.right)) + 1;
|
|
41
|
+
k1.height = Math.max(this.height(k1.left), this.height(k1.right)) + 1;
|
|
42
|
+
return k2;
|
|
43
|
+
}
|
|
44
|
+
doubleRotateLeft(k3) {
|
|
45
|
+
k3.left = this.rotateRight(k3.left);
|
|
46
|
+
return this.rotateLeft(k3);
|
|
47
|
+
}
|
|
48
|
+
doubleRotateRight(k1) {
|
|
49
|
+
k1.right = this.rotateLeft(k1.right);
|
|
50
|
+
return this.rotateRight(k1);
|
|
51
|
+
}
|
|
52
|
+
insert(node) {
|
|
53
|
+
let LEFT = 1, RIGHT = 2;
|
|
54
|
+
let y = null;
|
|
55
|
+
let x = this.root;
|
|
56
|
+
let t;
|
|
57
|
+
let dir1 = 0, dir2 = 0;
|
|
58
|
+
let c = new Stack_1.Stack();
|
|
59
|
+
while (x != null) {
|
|
60
|
+
y = x;
|
|
61
|
+
c.push(y);
|
|
62
|
+
dir1 = dir2;
|
|
63
|
+
if (this.comparator(node.data, x.data) < 0) {
|
|
64
|
+
x = x.left;
|
|
65
|
+
dir2 = LEFT;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
x = x.right;
|
|
69
|
+
dir2 = RIGHT;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
this.insertChild(y, node);
|
|
73
|
+
while (!c.isEmpty()) {
|
|
74
|
+
x = c.pop();
|
|
75
|
+
if (x != null) {
|
|
76
|
+
x.height = Math.max(this.height(x.left), this.height(x.right)) + 1;
|
|
77
|
+
if (Math.abs(this.height(x.left) - this.height(x.right)) == 2) {
|
|
78
|
+
if (dir1 == LEFT) {
|
|
79
|
+
if (dir2 == LEFT) {
|
|
80
|
+
t = this.rotateLeft(x);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
t = this.doubleRotateLeft(x);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
if (dir2 == LEFT) {
|
|
88
|
+
t = this.doubleRotateRight(x);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
t = this.rotateRight(x);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
y = c.pop();
|
|
95
|
+
this.insertChild(y, t);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
insertData(item) {
|
|
102
|
+
this.insert(new AvlTreeNode_1.AvlTreeNode(item));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.AvlTree = AvlTree;
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=AvlTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvlTree.js","sourceRoot":"","sources":["../../source/tree/AvlTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./TreeNode"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AvlTreeNode = void 0;
|
|
13
|
+
const TreeNode_1 = require("./TreeNode");
|
|
14
|
+
class AvlTreeNode extends TreeNode_1.TreeNode {
|
|
15
|
+
constructor(data) {
|
|
16
|
+
super(data);
|
|
17
|
+
this.height = 1;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.AvlTreeNode = AvlTreeNode;
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=AvlTreeNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvlTreeNode.js","sourceRoot":"","sources":["../../source/tree/AvlTreeNode.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,yCAAoC;IAEpC,MAAa,WAAe,SAAQ,mBAAW;QAI3C,YAAa,IAAO;YAChB,KAAK,CAAC,IAAI,CAAC,CAAA;YACX,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACnB,CAAC;KAEJ;IATD,kCASC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BTreeNode } from "./BTreeNode";
|
|
2
|
+
export declare class BTree<T> {
|
|
3
|
+
root: BTreeNode<T> | null;
|
|
4
|
+
comparator: <T>(item1: T, item2: T) => number;
|
|
5
|
+
d: number;
|
|
6
|
+
constructor(d: number, comparator: <T>(item1: T, item2: T) => number);
|
|
7
|
+
search(value: T): BTreeNode<T> | null;
|
|
8
|
+
insertData(data: T): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./BTreeNode"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BTree = void 0;
|
|
13
|
+
const BTreeNode_1 = require("./BTreeNode");
|
|
14
|
+
class BTree {
|
|
15
|
+
constructor(d, comparator) {
|
|
16
|
+
this.root = null;
|
|
17
|
+
this.comparator = comparator;
|
|
18
|
+
this.d = d;
|
|
19
|
+
}
|
|
20
|
+
search(value) {
|
|
21
|
+
let b = this.root;
|
|
22
|
+
while (b != null && !b.leaf) {
|
|
23
|
+
let child = b.position(value, this.comparator);
|
|
24
|
+
if (child < b.m && b.K[child] == value) {
|
|
25
|
+
return b;
|
|
26
|
+
}
|
|
27
|
+
b = b.children[child];
|
|
28
|
+
}
|
|
29
|
+
if (b != null) {
|
|
30
|
+
let child = b.position(value, this.comparator);
|
|
31
|
+
if (child < b.m && b.K[child] == value) {
|
|
32
|
+
return b;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
insertData(data) {
|
|
38
|
+
if (this.root == null) {
|
|
39
|
+
this.root = new BTreeNode_1.BTreeNode(this.d, undefined, undefined, undefined);
|
|
40
|
+
}
|
|
41
|
+
if (this.root.leaf) {
|
|
42
|
+
let s = this.root.insertLeaf(data, this.comparator);
|
|
43
|
+
if (s != null) {
|
|
44
|
+
let tmp = this.root;
|
|
45
|
+
this.root = new BTreeNode_1.BTreeNode(this.d, tmp, s, tmp.K[this.d]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
let s = this.root.insertNode(data, this.comparator, true);
|
|
50
|
+
if (s != null) {
|
|
51
|
+
this.root = s;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.BTree = BTree;
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=BTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BTree.js","sourceRoot":"","sources":["../../source/tree/BTree.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,2CAAsC;IAEtC,MAAa,KAAK;QAMd,YAAY,CAAS,EAAE,UAA6C;YAJpE,SAAI,GAAyB,IAAI,CAAC;YAK9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;YAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;QAEM,MAAM,CAAC,KAAQ;YAClB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAC;gBACxB,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAC;oBACnC,OAAO,CAAC,CAAA;iBACX;gBACD,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;aACxB;YACD,IAAI,CAAC,IAAI,IAAI,EAAC;gBACV,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,EAAC;oBACnC,OAAO,CAAC,CAAA;iBACX;aACJ;YACD,OAAO,IAAI,CAAA;QACf,CAAC;QAEM,UAAU,CAAC,IAAO;YACrB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAC;gBAClB,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAI,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;aACxE;YACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;gBACf,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;gBACnD,IAAI,CAAC,IAAI,IAAI,EAAC;oBACV,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAA;oBACnB,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAI,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/D;aACJ;iBAAM;gBACH,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,IAAI,EAAC;oBACV,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;iBACjB;aACJ;QACL,CAAC;KAEJ;IA/CD,sBA+CC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class BTreeNode<T> {
|
|
2
|
+
K: Array<T>;
|
|
3
|
+
m: number;
|
|
4
|
+
d: number;
|
|
5
|
+
leaf: boolean;
|
|
6
|
+
children: Array<BTreeNode<T>>;
|
|
7
|
+
constructor(d: number, firstChild: BTreeNode<T> | undefined, secondChild: BTreeNode<T> | undefined, newK: T | undefined);
|
|
8
|
+
position(value: T, comparator: <T>(item1: T, item2: T) => number): number;
|
|
9
|
+
private insertIntoK;
|
|
10
|
+
private moveHalfOfTheKToNewNode;
|
|
11
|
+
private moveHalfOfTheChildrenToNewNode;
|
|
12
|
+
private moveHalfOfTheElementsToNewNode;
|
|
13
|
+
insertNode(value: T, comparator: <T>(item1: T, item2: T) => number, isRoot: boolean): BTreeNode<T> | null;
|
|
14
|
+
insertLeaf(value: T, comparator: <T>(item1: T, item2: T) => number): BTreeNode<T> | null;
|
|
15
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BTreeNode = void 0;
|
|
13
|
+
class BTreeNode {
|
|
14
|
+
constructor(d, firstChild, secondChild, newK) {
|
|
15
|
+
this.d = d;
|
|
16
|
+
this.K = [];
|
|
17
|
+
this.children = [];
|
|
18
|
+
if (firstChild == undefined) {
|
|
19
|
+
this.m = 0;
|
|
20
|
+
this.leaf = true;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.m = 1;
|
|
24
|
+
this.leaf = false;
|
|
25
|
+
this.children[0] = firstChild;
|
|
26
|
+
if (secondChild != undefined) {
|
|
27
|
+
this.children[1] = secondChild;
|
|
28
|
+
}
|
|
29
|
+
if (newK != undefined) {
|
|
30
|
+
this.K[0] = newK;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
position(value, comparator) {
|
|
35
|
+
if (this.m == 0) {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
if (comparator(value, this.K[this.m - 1]) > 0) {
|
|
39
|
+
return this.m;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
for (let i = 0; i < this.m; i++) {
|
|
43
|
+
if (comparator(value, this.K[i]) <= 0) {
|
|
44
|
+
return i;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return -1;
|
|
49
|
+
}
|
|
50
|
+
insertIntoK(index, insertedK) {
|
|
51
|
+
for (let i = this.m; i > index; i--) {
|
|
52
|
+
this.K[i] = this.K[i - 1];
|
|
53
|
+
}
|
|
54
|
+
this.K[index] = insertedK;
|
|
55
|
+
}
|
|
56
|
+
moveHalfOfTheKToNewNode(newNode) {
|
|
57
|
+
for (let i = 0; i < this.d; i++) {
|
|
58
|
+
newNode.K[i] = this.K[i + this.d + 1];
|
|
59
|
+
}
|
|
60
|
+
newNode.m = this.d;
|
|
61
|
+
}
|
|
62
|
+
moveHalfOfTheChildrenToNewNode(newNode) {
|
|
63
|
+
for (let i = 0; i < this.d; i++) {
|
|
64
|
+
newNode.children[i] = this.children[i + this.d + 1];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
moveHalfOfTheElementsToNewNode(newNode) {
|
|
68
|
+
this.moveHalfOfTheKToNewNode(newNode);
|
|
69
|
+
this.moveHalfOfTheChildrenToNewNode(newNode);
|
|
70
|
+
}
|
|
71
|
+
insertNode(value, comparator, isRoot) {
|
|
72
|
+
let s;
|
|
73
|
+
let newNode;
|
|
74
|
+
let child;
|
|
75
|
+
child = this.position(value, comparator);
|
|
76
|
+
if (!this.children[child].leaf) {
|
|
77
|
+
s = this.children[child].insertNode(value, comparator, false);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
s = this.children[child].insertLeaf(value, comparator);
|
|
81
|
+
}
|
|
82
|
+
if (s == null) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
this.insertIntoK(child, this.children[child].K[this.d]);
|
|
86
|
+
if (this.m < 2 * this.d) {
|
|
87
|
+
this.children[child + 1] = s;
|
|
88
|
+
this.m++;
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
newNode = new BTreeNode(this.d, undefined, undefined, undefined);
|
|
93
|
+
newNode.leaf = false;
|
|
94
|
+
this.moveHalfOfTheElementsToNewNode(newNode);
|
|
95
|
+
newNode.children[this.d] = s;
|
|
96
|
+
this.m = this.d;
|
|
97
|
+
if (isRoot) {
|
|
98
|
+
return new BTreeNode(this.d, this, newNode, this.K[this.d]);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return newNode;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
insertLeaf(value, comparator) {
|
|
106
|
+
let child = this.position(value, comparator);
|
|
107
|
+
this.insertIntoK(child, value);
|
|
108
|
+
if (this.m < 2 * this.d) {
|
|
109
|
+
this.m++;
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
let newNode = new BTreeNode(this.d, undefined, undefined, undefined);
|
|
114
|
+
this.moveHalfOfTheKToNewNode(newNode);
|
|
115
|
+
this.m = this.d;
|
|
116
|
+
return newNode;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.BTreeNode = BTreeNode;
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=BTreeNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BTreeNode.js","sourceRoot":"","sources":["../../source/tree/BTreeNode.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,MAAa,SAAS;QAQlB,YAAY,CAAS,EAAE,UAAoC,EAAE,WAAqC,EAAE,IAAoB;YACpH,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YACV,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,UAAU,IAAI,SAAS,EAAC;gBACxB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;gBACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;aACnB;iBAAM;gBACH,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;gBACV,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;gBACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;gBAC9B,IAAI,WAAW,IAAI,SAAS,EAAC;oBACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;iBAClC;gBACD,IAAI,IAAI,IAAI,SAAS,EAAC;oBAClB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;iBACpB;aACJ;QACL,CAAC;QAED,QAAQ,CAAC,KAAQ,EAAE,UAA6C;YAC5D,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAC;gBACZ,OAAO,CAAC,CAAA;aACX;YACD,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAC;gBAC1C,OAAO,IAAI,CAAC,CAAC,CAAA;aAChB;iBAAM;gBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC;oBAC5B,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAC;wBAClC,OAAO,CAAC,CAAA;qBACX;iBACJ;aACJ;YACD,OAAO,CAAC,CAAC,CAAA;QACb,CAAC;QAEO,WAAW,CAAC,KAAa,EAAE,SAAY;YAC3C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAC;gBAChC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;aAC5B;YACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;QAC7B,CAAC;QAEO,uBAAuB,CAAC,OAAqB;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;aACxC;YACD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACtB,CAAC;QAEO,8BAA8B,CAAC,OAAqB;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC;gBAC7B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACvD;QACL,CAAC;QAEO,8BAA8B,CAAC,OAAqB;YACxD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAEM,UAAU,CAAC,KAAQ,EAAE,UAA6C,EAAE,MAAe;YACtF,IAAI,CAAuB,CAAA;YAC3B,IAAI,OAAsB,CAAA;YAC1B,IAAI,KAAc,CAAA;YAClB,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAC;gBAC3B,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;aACjE;iBAAM;gBACH,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;aAC1D;YACD,IAAI,CAAC,IAAI,IAAI,EAAC;gBACV,OAAO,IAAI,CAAA;aACd;YACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAC;gBACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC5B,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,OAAO,GAAG,IAAI,SAAS,CAAI,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAA;gBACpB,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAA;gBAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC5B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;gBACf,IAAI,MAAM,EAAC;oBACP,OAAO,IAAI,SAAS,CAAI,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;iBACjE;qBAAM;oBACH,OAAO,OAAO,CAAA;iBACjB;aACJ;QACL,CAAC;QAEM,UAAU,CAAC,KAAQ,EAAE,UAA6C;YACrE,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;YAC5C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC9B,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,EAAC;gBACpB,IAAI,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,IAAI,CAAA;aACd;iBAAM;gBACH,IAAI,OAAO,GAAG,IAAI,SAAS,CAAI,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBACxE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAChB,OAAO,OAAO,CAAC;aAClB;QACL,CAAC;KAEJ;IAnHD,8BAmHC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TreeNode } from "./TreeNode";
|
|
2
|
+
export declare class Tree<T> {
|
|
3
|
+
protected root: TreeNode<T> | null;
|
|
4
|
+
protected comparator: <T>(item1: T, item2: T) => number;
|
|
5
|
+
constructor(comparator: <T>(item1: T, item2: T) => number);
|
|
6
|
+
search(value: T): TreeNode<T> | null;
|
|
7
|
+
protected insertChild(parent: TreeNode<T> | null, child: TreeNode<T>): void;
|
|
8
|
+
insert(node: TreeNode<T>): void;
|
|
9
|
+
insertData(data: T): void;
|
|
10
|
+
}
|