Skip to content

Commit 9d34aa3

Browse files
authored
Update queue_using_singly_linked_list.rs
1 parent 86d87d0 commit 9d34aa3

File tree

1 file changed

+32
-45
lines changed

1 file changed

+32
-45
lines changed

src/data_structures/queue_using_singly_linked_list.rs

Lines changed: 32 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
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
1717
use 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>
6868
where
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

Comments
 (0)