Skip to content

Commit f6e1f21

Browse files
committed
PriorityQueue ES6 class syntax
1 parent 4b487b9 commit f6e1f21

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

chapter04/03-PriorityQueue2.html

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title></title>
6+
</head>
7+
<body>
8+
<script type="text/javascript" src="01-Queue2.js"></script>
9+
<script type="text/javascript" src="03-PriorityQueue2.js"></script>
10+
</body>
11+
</html>

chapter04/03-PriorityQueue2.js

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
let PriorityQueue2 = (function () {
2+
3+
class QueueElement {
4+
constructor(element, priority){
5+
this.element = element;
6+
this.priority = priority;
7+
}
8+
}
9+
10+
const items = new WeakMap();
11+
12+
class PriorityQueue2 { //extends Queue2 { //with this approach the private properties are not reachable through inheritance
13+
14+
constructor () {
15+
items.set(this, []);
16+
}
17+
18+
enqueue(element, priority){
19+
let queueElement = new QueueElement(element, priority);
20+
21+
let q = items.get(this);
22+
23+
let added = false;
24+
for (let i=0; i<q.length; i++){
25+
if (queueElement.priority < q[i].priority){
26+
q.splice(i,0,queueElement);
27+
added = true;
28+
break;
29+
}
30+
}
31+
if (!added){
32+
q.push(queueElement);
33+
}
34+
35+
items.set(this, q);
36+
};
37+
38+
dequeue() {
39+
let q = items.get(this);
40+
let r = q.shift();
41+
items.set(this, q);
42+
return r;
43+
}
44+
45+
front() {
46+
let q = items.get(this);
47+
return q[0];
48+
}
49+
50+
isEmpty(){
51+
return items.get(this).length == 0;
52+
}
53+
54+
size(){
55+
let q = items.get(this);
56+
return q.length;
57+
}
58+
59+
clear(){
60+
items.set(this, []);
61+
}
62+
63+
print(){
64+
let q = items.get(this);
65+
for (let i=0; i<q.length; i++){
66+
console.log(`${q[i].element} - ${q[i].priority}`);
67+
}
68+
};
69+
}
70+
return PriorityQueue2;
71+
})();
72+
73+
74+
let priorityQueue = new PriorityQueue2();
75+
priorityQueue.enqueue("John", 2);
76+
priorityQueue.enqueue("Jack", 1);
77+
priorityQueue.enqueue("Camila", 1);
78+
priorityQueue.enqueue("Maxwell", 2);
79+
priorityQueue.enqueue("Ana", 3);
80+
priorityQueue.print();

0 commit comments

Comments
 (0)