use std::iter::Iterator;
pub mod linked_stack;
pub mod fixed_capacity_stack;
pub mod resizing_array_stack;
pub trait StackOfStrings {
fn new() -> Self;
fn push(&mut self, item: String);
fn pop(&mut self) -> String;
fn is_empty(&self) -> bool;
fn size(&self) -> usize {
unimplemented!()
}
}
pub trait Stack<T> {
fn new() -> Self;
fn push(&mut self, item: T);
fn pop(&mut self) -> Option<T>;
fn is_empty(&self) -> bool;
fn size(&self) -> usize {
unimplemented!()
}
}
pub mod linked_queue;
pub mod resizing_array_queue;
pub trait QueueOfStrings {
fn new() -> Self;
fn enqueue(&mut self, item: String);
fn dequeue(&mut self) -> String;
fn is_empty(&self) -> bool;
fn size(&self) -> usize;
}
pub trait Queue<T> {
fn new() -> Self;
fn enqueue(&mut self, item: T);
fn dequeue(&mut self) -> Option<T>;
fn is_empty(&self) -> bool;
fn size(&self) -> usize;
}
pub trait Bag<T> {
fn new() -> Self;
fn add(&mut self, item: T);
fn iter(&self) -> Iterator<Item=T>;
fn size(&self) -> usize {
unimplemented!()
}
}
pub mod bag;
pub mod linked_deque;
pub trait Deque<T> {
fn new() -> Self;
fn is_empty(&self) -> bool;
fn size(&self) -> usize;
fn add_first(&mut self, item: T);
fn add_last(&mut self, item: T);
fn remove_first(&mut self) -> Option<T>;
fn remove_last(&mut self) -> Option<T>;
}
pub mod resizing_array_randomized_queue;
pub trait RandomizedQueue<T> {
fn new() -> Self;
fn is_empty(&self) -> bool;
fn size(&self) -> usize;
fn enqueue(&mut self, item: T);
fn dequeue(&mut self) -> Option<T>;
fn sample(&self) -> Option<&T>;
}