2 个版本
0.1.1 | 2021 年 8 月 5 日 |
---|---|
0.1.0 | 2021 年 7 月 24 日 |
1659 in 数据结构
17KB
300 行
go-heap-rs
用 Rust 编写的 Golang 的堆
优点
- 对交换方法有更多控制
- 增加了
fix
和remove
方法 - 完全访问底层数据
缺点
- 必须手动由类似 Vector 的集合支持
- 实际上并不容易使用
- 缺少一些方法,如
from
导入
[dependencies]
go-heap-rs = "0.1"
使用示例
struct MinHeap<T: Ord>(Vec<T>);
impl<T: Ord> Heap<T> for MinHeap<T> {
fn len(&self) -> usize {
self.0.len()
}
fn less(&self, i: usize, j: usize) -> bool {
self.0[i] < self.0[j]
}
fn swap(&mut self, i: usize, j: usize) {
self.0.swap(i, j);
}
fn push(&mut self, x: T) {
self.0.push(x);
}
fn pop(&mut self) -> T {
self.0.pop().expect("pop on an empty vec!")
}
fn peak(&self) -> Option<&T> {
self.0.get(0)
}
}
fn test() {
let my_vec = MinHeap(vec![2, 4, 3, 1]);
let mut heap = HeapType::new(my_vec);
assert_eq!(heap.peak(), Some(&1));
assert_eq!(heap.pop(), Some(1));
heap.push(-1);
assert_eq!(heap.pop(), Some(-1));
}