Skip to content

Commit 75e03d1

Browse files
committed
feat(queue): implement queue
1 parent 12b1fd8 commit 75e03d1

File tree

3 files changed

+64
-0
lines changed

3 files changed

+64
-0
lines changed

data-structures/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const LinkedList = require('./linked-list');
2+
const Queue = require('./queue');
23

34
module.exports = {
45
LinkedList,
6+
Queue,
57
};

data-structures/queue/Queue.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const LinkedList = require('../linked-list/LinkedList');
2+
3+
module.exports = class Queue {
4+
constructor() {
5+
// We're going to implement Queue based on LinkedList since the two
6+
// structures are quite similar. Namely, they both operate mostly on
7+
// the elements at the beginning and the end. Compare enqueue/dequeue
8+
// operations of Queue with append/deleteHead operations of LinkedList.
9+
this.linkedList = new LinkedList();
10+
}
11+
12+
isEmpty() {
13+
return !this.linkedList.head;
14+
}
15+
16+
peek() {
17+
if (!this.linkedList.head) {
18+
return null;
19+
}
20+
21+
return this.linkedList.head.value;
22+
}
23+
24+
enqueue(value) {
25+
this.linkedList.append(value);
26+
}
27+
28+
dequeue() {
29+
const removedHead = this.linkedList.deleteHead();
30+
return removedHead ? removedHead.value : null;
31+
}
32+
33+
toString(callback) {
34+
// Return string representation of the queue's linked list.
35+
return this.linkedList.toString(callback);
36+
}
37+
};

data-structures/queue/index.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const Queue = require('./Queue');
2+
3+
console.log('start Queue ------');
4+
5+
const queue = new Queue();
6+
7+
queue.enqueue(1);
8+
queue.enqueue(2);
9+
10+
console.log(`after enqueue queue ${queue.toString()}`);
11+
12+
queue.enqueue({ value: 'test1', key: 'key1' });
13+
queue.enqueue({ value: 'test2', key: 'key2' });
14+
15+
console.log(`after enqueue queue ${queue.toString()}`);
16+
17+
console.log(`after dequeue=${queue.dequeue().value} queue ${queue.toString()}`);
18+
19+
const peek = queue.peek();
20+
21+
console.log(`after peek=${peek} isEmpty=${queue.isEmpty()}`);
22+
23+
console.log('end Queue -------');
24+
25+
module.exports = () => console.log('Queue is done');

0 commit comments

Comments
 (0)