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