This repository presents the Rust implementation of the provided Algorithms and data structures from William Fiset at: https://github.com/williamfiset/Algorithms
I highly recommend his YouTube channel, where he explains many of these algorithms in detail.
The implementation details are explained in comments and docs and the example usage is implied in unit tests. To run tests:
cargo test
This simple setup provides most features a decent IDE would provide (importantly, jump to definition and type labelling)
This is not a verbatim translation of the original implementation in Java. Instead, I try to make the code idiomatic in Rust, according to these rules
mod
sFor example, perfer
crate::graph::bfs::adjacency_list_iterative::fast_deque
over
com.williamfiset.algorithms.graphtheory.BreadthFirstSearchAdjacencyListIterativeFastQueue
Follow the conventions of std
types as much as possible.
For example, when implementing a Queue
, prefer
rust
pub fn push_back(&mut self, value: T);
pub fn pop_front(&mut self) -> Option<T>;
over
rust
pub fn enqueue(&mut self, value: T);
pub fn dequeue(&mut self) -> T;
// or
pub fn offer(&mut self, value: T);
pub fn poll(&mut self) -> T;
Option<T>
to Represent `Nullable ValuesGenrerally, Option::None
is an idiomatic representation of null
. This makes the code work better with the standard library and cause less surprises.