-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueues.js
111 lines (93 loc) · 2.11 KB
/
queues.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Classic FiFo Queues
class Queue{
constructor(){
this.collection = [];
}
enqueue(element){
this.collection.push(element);
return true;
}
dequeue(){
return this.collection.shift()
}
peek(){
return this.collection[0]
}
front(){
return this.peek()
}
size(){
return this.collection.length
}
isEmpty(){
return this.size() == 0;
}
}
const q1 = new Queue();
q1.enqueue(1)
q1.enqueue(2)
q1.enqueue(3)
q1.enqueue("fcc")
q1.enqueue("knowhere")
console.log('EMPTY?', q1.isEmpty())
console.log('Size', q1.size())
console.log('Front', q1.peek())
console.log('Dequeue', q1.dequeue())
console.log('Size after dq', q1.size())
console.log('Front after dq', q1.peek())
// Priority Queues
class PriorityQueue {
constructor() {
this.collection = [];
}
enqueue(element) {
if (this.isEmpty()) {
this.collection.push(element);
} else {
let added = false; // in case of last element with that priority
let length = this.collection.length;
for (let i = 0; i < length; i++) {
console.log(element, this.collection[i][1]);
if (element[1] < this.collection[i][1]) {
// check if element's prioity is less
this.collection.splice(i, 0, element); // if it is then push element to index i
added = true;
break;
}
}
if (!added) this.collection.push(element);
}
}
dequeue() {
let value = this.collection.shift();
return value[0];
}
peek() {
return this.collection[0];
}
front() {
return this.peek();
}
size() {
return this.collection.length;
}
isEmpty() {
return this.size() == 0;
}
toString() {
console.log(this.collection);
}
}
const pq1 = new PriorityQueue();
pq1.enqueue(["one", 1]);
pq1.enqueue(["two", 2]);
pq1.enqueue(["three", 3]);
pq1.enqueue(["fcc", 1]);
pq1.enqueue(["knowhere", 5]);
console.log("EMPTY?", pq1.isEmpty());
console.log("Size", pq1.size());
console.log("Front", pq1.peek());
console.log(pq1);
// console.log('Dequeue', q1.dequeue())
// console.log('Size after dq', q1.size())
// console.log('Front after dq', q1.peek())