8 个稳定版本
1.0.7 | 2024 年 2 月 16 日 |
---|---|
1.0.6 | 2020 年 6 月 11 日 |
1.0.5 | 2019 年 11 月 21 日 |
1.0.4 | 2018 年 12 月 18 日 |
0.1.0 | 2017 年 7 月 31 日 |
#179 在 数据结构
7,779 每月下载量
在 10 个crate中使用 (3 直接)
16KB
234 行
Cactus
此库提供不可变仙人掌栈(也称为意大利面栈或父指针树)。仙人掌栈是一个(可能为空)具有指向父节点(可能为空)指针的节点。任何给定的节点都有一个唯一的路径返回到根节点。而不是可变更新栈,可以通过创建和访问不可变节点(当节点变为不可达时,其内存将自动回收)来代替。可以通过 child
函数(类似于常规 push
)创建指向父节点的新子节点,并且可以通过 parent
函数(类似于常规 pop
)检索父节点。
use cactus::Cactus;
let c = Cactus::new();
assert!(c.is_empty());
let c2 = c.child(1);
assert_eq!(c2.len(), 1);
assert_eq!(*c2.val().unwrap(), 1);
let c3 = c2.parent().unwrap();
assert!(c3.is_empty());
从一个给定的节点可以创建多个子栈
use cactus::Cactus;
let c = Cactus::new().child(1);
let c2 = c.child(2);
let c3 = c.child(3);
assert!(c2 != c3);
assert_eq!(c2.vals().cloned().collect::<Vec<_>>(), [2, 1]);
assert_eq!(c3.vals().cloned().collect::<Vec<_>>(), [3, 1]);