-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjs_queue.js
More file actions
104 lines (91 loc) · 2.31 KB
/
js_queue.js
File metadata and controls
104 lines (91 loc) · 2.31 KB
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
/** A helper class to implement queue **/
class Queue {
constructor() {
this.items = [];
}
dequeue(){
return this.items.shift();
}
enqueue(item){
this.items.push(item);
}
front(){
return this.items[0];
}
isEmtpy(){
return this.items.length==0;
}
size(){
return this.items.length;
}
clear(){
this.items = [];
}
}
// (A) implementation of a normal queue
let normalQueue = new Queue();
normalQueue.enqueue('I went in first');
normalQueue.enqueue('I went in second');
normalQueue.enqueue('I went in third');
//kicking out first
normalQueue.dequeue();
//check queue
console.log(normalQueue);
// (B) implementation of a Priority Queue
class PriorityQueue extends Queue{
constructor(){
super();
}
//enqueue with priority
enqueue(item){
if (this.isEmtpy()){
this.items.push(item);
} else {
let added=false;
for (let i=0;i<this.items.length;i++){
if(item.priority<this.items[i].priority){
this.items.splice(i,0,item);
added = true;
break;
}
}
if (!added)
this.items.push(item);
}
}
}
//example to test priority Queue
class PriorityObject{
constructor(priority,item){
this.priority = priority;
this.item = item;
}
}
let obj1 = new PriorityObject(2,"tea"),
obj2 = new PriorityObject(1,"brush"),
obj3 = new PriorityObject(5,"dinner"),
obj4 = new PriorityObject(3,"lunch");
let priorityQueue = new PriorityQueue();
priorityQueue.enqueue(obj1);
priorityQueue.enqueue(obj2);
priorityQueue.enqueue(obj3);
priorityQueue.enqueue(obj4);
console.log(priorityQueue);
// (C) Circular Queue - Hot Potato
let hotPotato = (nameList,num)=>{
let queue = new Queue();
for(let i=0;i<nameList.length;i++){
queue.enqueue(nameList[i]);
}
let eliminated="";
while (queue.size()>1){
for(let i=0;i<num;i++){
queue.enqueue(queue.dequeue());
}
eliminated = queue.dequeue();
console.log(`${eliminated} was eliminated from the game`);
}
return queue.dequeue();
};
let winner = hotPotato(['John','Nash','Chris','Ben','Kyle'],7);
console.log(winner);