File tree 3 files changed +64
-0
lines changed 3 files changed +64
-0
lines changed Original file line number Diff line number Diff line change 1
1
const LinkedList = require ( './linked-list' ) ;
2
+ const Queue = require ( './queue' ) ;
2
3
3
4
module . exports = {
4
5
LinkedList,
6
+ Queue,
5
7
} ;
Original file line number Diff line number Diff line change
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
+ } ;
Original file line number Diff line number Diff line change
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' ) ;
You can’t perform that action at this time.
0 commit comments