From 5e5082862793c24e3e84b759af72bb30781f39cd Mon Sep 17 00:00:00 2001 From: specCon18 Date: Sun, 19 May 2024 02:04:39 -0400 Subject: [PATCH] added stack and queue from https://github.com/jlkiri/rust-data-structures/blob/master/src/stack.rs --- src/data_structures.rs | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/data_structures.rs b/src/data_structures.rs index f2cb620..0911971 100644 --- a/src/data_structures.rs +++ b/src/data_structures.rs @@ -174,3 +174,61 @@ impl MinHeap { } } } +pub struct Queue { + queue: Vec, +} + +impl Queue { + pub fn new() -> Self { + Queue { queue: Vec::new() } + } + + pub fn length(&self) -> usize { + self.queue.len() + } + + pub fn enqueue(&mut self, item: T) { + self.queue.push(item) + } + + pub fn dequeue(&mut self) -> T { + self.queue.remove(0) + } + pub fn is_empty(&self) -> bool { + self.queue.is_empty() + } + + pub fn peek(&self) -> Option<&T> { + self.queue.first() + } +} + +pub struct Stack { + stack: Vec, +} + +impl Stack { + pub fn new() -> Self { + Stack { stack: Vec::new() } + } + + pub fn length(&self) -> usize { + self.stack.len() + } + + pub fn pop(&mut self) -> Option { + self.stack.pop() + } + + pub fn push(&mut self, item: T) { + self.stack.push(item) + } + + pub fn is_empty(&self) -> bool { + self.stack.is_empty() + } + + pub fn peek(&self) -> Option<&T> { + self.stack.last() + } +}