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