Skip to content

Commit 0d604bc

Browse files
committed
Added Queue
1 parent 1f9b7ea commit 0d604bc

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

data-structures/queue.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/**
2+
* @author Rashik Ansar
3+
*
4+
* Implementation of Queue Data structure
5+
* Queue follows FIFO (First In First Out) Principle
6+
*/
7+
8+
class Node {
9+
constructor(data) {
10+
this.data = data;
11+
this.next = null;
12+
}
13+
}
14+
15+
class Queue {
16+
constructor() {
17+
this.first = null;
18+
this.last = null;
19+
this.size = 0;
20+
}
21+
22+
/**
23+
* Adding data to the end of queue
24+
* @param {*} data Data to add in the queue
25+
* @returns {Queue} Returns the queue after adding new data
26+
*/
27+
enqueue(data) {
28+
let newNode = new Node(data);
29+
if (!this.first) {
30+
this.first = newNode;
31+
this.last = newNode;
32+
} else {
33+
this.last.next = newNode;
34+
this.last = newNode;
35+
}
36+
this.size++;
37+
return this;
38+
}
39+
40+
/**
41+
* Removing data from the beginning of the queue
42+
* @returns Data that is removing from queue
43+
*/
44+
dequeue() {
45+
if (!this.first) {
46+
throw Error(
47+
'UNDERFLOW::: The queue is empty, there is nothing to remove'
48+
);
49+
}
50+
let temp = this.first;
51+
if (this.first === this.last) {
52+
this.last = null;
53+
}
54+
this.first = this.first.next;
55+
this.size--;
56+
return temp.data;
57+
}
58+
59+
/**
60+
* @returns First element in the queue
61+
*/
62+
peek() {
63+
if (!this.first) {
64+
throw Error('Stack is empty');
65+
}
66+
return this.first.data;
67+
}
68+
}

0 commit comments

Comments
 (0)