-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcreateQueue.js
59 lines (59 loc) · 2.11 KB
/
createQueue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* 1 way: O(1) time complexity */
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return privateMap.get(receiver);
};
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to set private field on non-instance");
}
privateMap.set(receiver, value);
return value;
};
var _storage, _first, _last;
class Queue {
constructor() {
_storage.set(this, {});
_first.set(this, 0);
_last.set(this, 0);
}
enqueue(item) {
__classPrivateFieldGet(this, _storage)[__classPrivateFieldGet(this, _last)] = item;
__classPrivateFieldSet(this, _last, +__classPrivateFieldGet(this, _last) + 1);
return this.size;
}
dequeue() {
if (this.size === 0) {
console.warn("The queue is empty");
return;
}
const value = __classPrivateFieldGet(this, _storage)[__classPrivateFieldGet(this, _first)];
delete __classPrivateFieldGet(this, _storage)[__classPrivateFieldGet(this, _first)];
__classPrivateFieldSet(this, _first, +__classPrivateFieldGet(this, _first) + 1);
return value;
}
peek() {
console.log(__classPrivateFieldGet(this, _storage)[__classPrivateFieldGet(this, _first)]);
return __classPrivateFieldGet(this, _storage)[__classPrivateFieldGet(this, _first)];
}
get size() {
return __classPrivateFieldGet(this, _last) - __classPrivateFieldGet(this, _first);
}
print() {
console.log("Queue", __classPrivateFieldGet(this, _storage));
return __classPrivateFieldGet(this, _storage);
}
}
_storage = new WeakMap(), _first = new WeakMap(), _last = new WeakMap();
const queue = new Queue();
queue.enqueue(5);
queue.enqueue(12);
queue.dequeue();
queue.print();
queue.peek();
queue.enqueue(7);
queue.print();
console.log("Queue size:", queue.size);
export { Queue };