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数据结构

Download history 965/week @ 2024-04-15 1084/week @ 2024-04-22 929/week @ 2024-04-29 2021/week @ 2024-05-06 1746/week @ 2024-05-13 2268/week @ 2024-05-20 2124/week @ 2024-05-27 2212/week @ 2024-06-03 2098/week @ 2024-06-10 1820/week @ 2024-06-17 3101/week @ 2024-06-24 1967/week @ 2024-07-01 2204/week @ 2024-07-08 1998/week @ 2024-07-15 1753/week @ 2024-07-22 1645/week @ 2024-07-29

7,779 每月下载量
10 个crate中使用 (3 直接)

Apache-2.0/MIT

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]);

无运行时依赖