11const LinkedList = require ( '../linked-lists/linked-list' ) ;
22
3+ /* Usage Example:
4+ // tag::snippet[]
5+ const queue = new Queue();
6+
7+ queue.enqueue('a');
8+ queue.enqueue('b');
9+ queue.dequeue(); //↪️ a
10+ queue.enqueue('c');
11+ queue.dequeue(); //↪️ b
12+ queue.dequeue(); //↪️ c
13+ // end::snippet[]
14+ // */
15+
316// tag::constructor[]
417/**
518 * Data structure where we add and remove elements in a first-in, first-out (FIFO) fashion
619 */
720class Queue {
8- constructor ( ) {
9- this . items = new LinkedList ( ) ;
21+ constructor ( iterable = [ ] ) {
22+ this . items = new LinkedList ( iterable ) ;
1023 }
1124 // end::constructor[]
1225
1326 // tag::enqueue[]
1427 /**
15- * Add element to the queue
28+ * Add element to the back of the queue.
1629 * Runtime: O(1)
1730 * @param {any } item
1831 * @returns {queue } instance to allow chaining.
@@ -25,7 +38,7 @@ class Queue {
2538
2639 // tag::dequeue[]
2740 /**
28- * Remove element from the queue
41+ * Remove element from the front of the queue.
2942 * Runtime: O(1)
3043 * @returns {any } removed value.
3144 */
@@ -47,23 +60,30 @@ class Queue {
4760 isEmpty ( ) {
4861 return ! this . items . size ;
4962 }
63+
64+ /**
65+ * Return the most recent value or null if empty.
66+ */
67+ back ( ) {
68+ if ( this . isEmpty ( ) ) return null ;
69+ return this . items . last . value ;
70+ }
71+
72+ /**
73+ * Return oldest value from the queue or null if empty.
74+ * (Peek at the next value to be dequeue)
75+ */
76+ front ( ) {
77+ if ( this . isEmpty ( ) ) return null ;
78+ return this . items . first . value ;
79+ }
5080}
5181
5282// Aliases
83+ Queue . prototype . peek = Queue . prototype . front ;
5384Queue . prototype . add = Queue . prototype . enqueue ;
85+ Queue . prototype . push = Queue . prototype . enqueue ;
5486Queue . prototype . remove = Queue . prototype . dequeue ;
87+ Queue . prototype . pop = Queue . prototype . dequeue ;
5588
5689module . exports = Queue ;
57-
58- /* Usage Example:
59- // tag::snippet[]
60- const queue = new Queue();
61-
62- queue.enqueue('a');
63- queue.enqueue('b');
64- queue.dequeue(); //↪️ a
65- queue.enqueue('c');
66- queue.dequeue(); //↪️ b
67- queue.dequeue(); //↪️ c
68- // end::snippet[]
69- // */
0 commit comments