1111//! The [len] method's time complexity is O(1)
1212//! The [is_empty] method's time complexity is O(1)
1313//!
14- //! I implemented Iterator, Default and Debug trait for our Queue data structure
14+ //! I implemented Iterator, Default and Debug trait for our LinkedListQueue data structure
1515//!
1616
1717use std:: fmt:: Debug ;
@@ -32,56 +32,59 @@ impl<T> Node<T> {
3232 }
3333}
3434
35- /// Queue Implementation using Singly Linked List logic
35+ /// LinkedListQueue Implementation using Singly Linked List logic
3636#[ derive( Clone ) ]
37- pub struct Queue < T > {
37+ pub struct LinkedListQueue < T > {
3838 length : usize ,
3939 head : Option < Box < Node < T > > > ,
4040 tail : Option < Box < Node < T > > > ,
4141 // Act like we own the boxes or nodes, since we are gonna construct and mutate them
4242 _marker : PhantomData < Box < Node < T > > > ,
4343}
4444
45- // Implementing default for our Queue
46- impl < T > Default for Queue < T > {
45+ // Implementing default for our LinkedListQueue
46+ impl < T > Default for LinkedListQueue < T > {
4747 fn default ( ) -> Self {
48- Queue :: new ( )
48+ LinkedListQueue :: new ( )
4949 }
5050}
5151
5252// Implement iterator for the queue
53- struct QueueIterator < ' a , T > {
53+ pub struct LinkedListQueueIterator < ' a , T > {
5454 current : & ' a Option < Box < Node < T > > > ,
5555 _marker : PhantomData < & ' a T > ,
5656}
5757
58- // Implementing Drop for Queue
59- impl < T > Drop for Queue < T > {
58+ // Implementing Drop for LinkedListQueue
59+ impl < T > Drop for LinkedListQueue < T > {
6060 fn drop ( & mut self ) {
6161 // Dequeue the queue until its empty
6262 while self . dequeue ( ) . is_some ( ) { }
6363 }
6464}
6565
66- // Debug implementation for our Queue
67- impl < T > Debug for Queue < T >
66+ // Debug implementation for our LinkedListQueue
67+ impl < T > Debug for LinkedListQueue < T >
6868where
6969 T : Debug ,
7070{
7171 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
72- let mut output = String :: from ( "Queue ( elements: [" ) ;
72+ use std:: fmt:: Write as _;
73+
74+ let mut output = String :: from ( "LinkedListQueue ( elements: [" ) ;
75+
7376 for elem in self . iter ( ) {
74- output . push_str ( & format ! ( " {:?} " , elem) ) ;
77+ let _ = write ! ( output , " {:?} " , elem) ;
7578 }
79+
80+ let _ = write ! ( output, "], length: {} )" , self . len( ) ) ;
7681
77- output. push_str ( & format ! ( "], length: {} )" , self . len( ) ) ) ;
78-
79- write ! ( f, "{}" , output)
82+ write ! ( f, "{}" , output)
8083 }
8184}
8285
83- // QueueIterator implementation
84- impl < ' a , T > Iterator for QueueIterator < ' a , T > {
86+ // LinkedListQueueIterator implementation
87+ impl < ' a , T > Iterator for LinkedListQueueIterator < ' a , T > {
8588 type Item = & ' a T ;
8689
8790 fn next ( & mut self ) -> Option < Self :: Item > {
@@ -96,7 +99,7 @@ impl<'a, T> Iterator for QueueIterator<'a, T> {
9699}
97100
98101// Implementation for the queue
99- impl < T > Queue < T > {
102+ impl < T > LinkedListQueue < T > {
100103 pub fn new ( ) -> Self {
101104 Self {
102105 length : 0 ,
@@ -107,8 +110,8 @@ impl<T> Queue<T> {
107110 }
108111
109112 // Iter method, will enably us to iterate through our queue
110- pub fn iter ( & self ) -> QueueIterator < ' _ , T > {
111- QueueIterator {
113+ pub fn iter ( & self ) -> LinkedListQueueIterator < ' _ , T > {
114+ LinkedListQueueIterator {
112115 current : & self . tail ,
113116 _marker : PhantomData ,
114117 }
@@ -328,7 +331,7 @@ mod tests {
328331 #[ test]
329332 fn test_enqueue ( ) {
330333 // Creating a new queue
331- let mut queue = Queue :: < i32 > :: new ( ) ;
334+ let mut queue = LinkedListQueue :: < i32 > :: new ( ) ;
332335 queue. enqueue ( 1 ) ;
333336 queue. enqueue ( 2 ) ;
334337 queue. enqueue ( 3 ) ;
@@ -341,7 +344,7 @@ mod tests {
341344
342345 #[ test]
343346 fn test_dequeue ( ) {
344- let mut queue = Queue :: < i32 > :: new ( ) ;
347+ let mut queue = LinkedListQueue :: < i32 > :: new ( ) ;
345348 // Enqueue a couple of values
346349 queue. enqueue ( 1 ) ;
347350 queue. enqueue ( 2 ) ;
@@ -357,7 +360,7 @@ mod tests {
357360
358361 #[ test]
359362 fn test_queue_length ( ) {
360- let mut queue = Queue :: new ( ) ;
363+ let mut queue = LinkedListQueue :: new ( ) ;
361364
362365 // Enqueue a couple of elements
363366 queue. enqueue ( 1 ) ;
@@ -369,7 +372,7 @@ mod tests {
369372
370373 #[ test]
371374 fn test_peek_front ( ) {
372- let mut queue = Queue :: default ( ) ;
375+ let mut queue = LinkedListQueue :: default ( ) ;
373376
374377 queue. enqueue ( 1 ) ;
375378 queue. enqueue ( 2 ) ;
@@ -380,7 +383,7 @@ mod tests {
380383
381384 #[ test]
382385 fn peek_back ( ) {
383- let mut queue = Queue :: default ( ) ;
386+ let mut queue = LinkedListQueue :: default ( ) ;
384387
385388 queue. enqueue ( 1 ) ;
386389 queue. enqueue ( 2 ) ;
@@ -391,7 +394,7 @@ mod tests {
391394
392395 #[ test]
393396 fn test_get_from_queue ( ) {
394- let mut queue = Queue :: new ( ) ;
397+ let mut queue = LinkedListQueue :: new ( ) ;
395398
396399 queue. enqueue ( 2 ) ;
397400 queue. enqueue ( 3 ) ;
@@ -405,7 +408,7 @@ mod tests {
405408
406409 #[ test]
407410 fn test_queue_insert ( ) {
408- let mut queue = Queue :: default ( ) ;
411+ let mut queue = LinkedListQueue :: default ( ) ;
409412
410413 queue. enqueue ( 1 ) ;
411414 queue. enqueue ( 3 ) ;
@@ -415,25 +418,9 @@ mod tests {
415418 assert_eq ! ( queue. len( ) , 4 ) ;
416419 }
417420
418- #[ test]
419- fn queue_iter ( ) {
420- let mut queue = Queue :: < i32 > :: new ( ) ;
421- queue. enqueue ( 2 ) ;
422- queue. enqueue ( 3 ) ;
423- queue. enqueue ( 4 ) ;
424-
425- println ! ( "{:?}" , queue) ;
426-
427- for i in queue. iter ( ) {
428- println ! ( "Item: {}" , i) ;
429- }
430-
431- assert ! ( true ) ;
432- }
433-
434421 #[ test]
435422 fn test_queue_delete ( ) {
436- let mut queue = Queue :: default ( ) ;
423+ let mut queue = LinkedListQueue :: default ( ) ;
437424
438425 queue. enqueue ( 1 ) ;
439426 queue. enqueue ( 2 ) ;
0 commit comments