Skip to content

Commit 42998ac

Browse files
committed
Added Queue Data Structure
1 parent cedbe13 commit 42998ac

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

Data Structures/Queue/Queue.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
/* Queue
2+
* A Queue is a data structure that allows you to add an element to the end of
3+
* a list and remove the item at the front. A queue follows a "First In First Out"
4+
* system, where the first item to enter the queue is the first to be removed. This
5+
* implementation uses an array to store the queue.
6+
*/
7+
8+
//Functions: enqueue, dequeue, peek, view, length
9+
10+
var Queue = function() {
11+
12+
//This keeps track of where the end of the queue is
13+
this.back = 0;
14+
//This is the array representation of the queue
15+
this.queue = {};
16+
17+
//Add a value to the end of the queue
18+
this.enqueue = function(item) {
19+
this.queue[this.back] = item;
20+
this.back++;
21+
}
22+
23+
//Removes the value at the front of the queue
24+
this.dequeue = function() {
25+
if (this.back === 0) {
26+
return "Queue is Empty";
27+
}
28+
29+
var result = this.queue[this.front];
30+
delete this.queue[this.front];
31+
32+
//Shift all the other items forward
33+
for (var i = 1; i < this.back; i++) {
34+
this.queue[i - 1] = this.queue[i];
35+
}
36+
37+
//clean up the leftover duplicated value at the back of the queue
38+
delete this.queue[this.back];
39+
this.back--;
40+
41+
return result;
42+
}
43+
44+
//Return the length of the queue
45+
this.length = function() {
46+
return this.back;
47+
}
48+
49+
//Return the item at the front of the queue
50+
this.peek = function() {
51+
return this.queue[0];
52+
}
53+
54+
//List all the items in the queue
55+
this.view = function() {
56+
var str = "{"
57+
//construct a single string to represent the items in the queue
58+
for (var i = 0; i < this.back; i++) {
59+
str += this.queue[i];
60+
if (i !== this.back - 1) {
61+
str += ", ";
62+
}
63+
}
64+
str += "}";
65+
66+
console.log(str);
67+
}
68+
}
69+
70+
//Implementation
71+
var myQueue = new Queue();
72+
73+
myQueue.enqueue(1);
74+
myQueue.enqueue(5);
75+
myQueue.enqueue(76);
76+
myQueue.enqueue(69);
77+
myQueue.enqueue(32);
78+
myQueue.enqueue(54);
79+
80+
myQueue.view();
81+
82+
console.log("Length: " + myQueue.length());
83+
console.log("Front item: " + myQueue.peek());
84+
console.log("Removed " + myQueue.dequeue() + " from front.");
85+
console.log("New front item: " + myQueue.peek());
86+
console.log("Removed " + myQueue.dequeue() + " from front.");
87+
console.log("New front item: " + myQueue.peek());
88+
myQueue.enqueue(55);
89+
console.log("Inserted 55");
90+
console.log("New front item: " + myQueue.peek());
91+
92+
for (var i = 0; i < 5; i++) {
93+
myQueue.dequeue();
94+
myQueue.view();
95+
}
96+
97+
console.log(myQueue.dequeue());

0 commit comments

Comments
 (0)