diff --git a/src/data_structures.rs b/src/data_structures.rs index e37edaf..6f1e887 100644 --- a/src/data_structures.rs +++ b/src/data_structures.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; -// Define a struct to represent the adjacency list with weighted edges pub struct WeightedAdjacencyList { vertices: HashMap>, } @@ -175,99 +174,98 @@ impl MinHeap { } } pub struct Queue { - queue: Vec, + 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 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, + 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() - } + 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() + } } -use std::mem; struct Node { - value: T, - next: Option>>, + value: T, + prev: Option>>, + next: Option>>, } type Link = Option>>; pub struct List { - head: Link, + head: Link, + tail: Link } impl List { - pub fn new() -> Self { - List { head: None } - } + pub fn new() -> Self { + List { head: None, tail: None } + } + // Access node by index + pub fn get_node(&self, index: usize) -> Option<&Node> { + let mut current_node = self.head.as_ref().map(|boxed_node| &**boxed_node); + let mut current_index = 0; - pub fn push(&mut self, item: T) { - let next_node = Box::new(Node { - value: item, - next: self.head.take(), - }); + while let Some(node) = current_node { + if current_index == index { + return Some(node); + } + current_node = node.next.as_ref().map(|boxed_node| &**boxed_node); + current_index += 1; + } - self.head = Some(next_node) - } - - pub fn pop(&mut self) -> Option { - self.head.take().map(|node| { - self.head = node.next; - node.value - }) - } - - pub fn peek(&self) -> Option<&T> { - self.head.as_ref().map(|node| &node.value) - } + None + } + pub fn insert_before(insertion_node:Node,node:Node) -> Self { + //TODO: Implement Insert Before + List{head:None,tail:None} + } + pub fn insert_after(insertion_node:Node,node:Node) -> Self { + //TODO: Implement Insert After + List{head:None,tail:None} + } + pub fn delete(&self,index:usize) -> Self { + //TODO: Implement Delete + List{head:None,tail:None} + } }