#circular-buffer #ring-buffer #stack #tiny #push

ringstack

一个非常简单的环形缓冲区栈实现

3 个不稳定版本

0.2.0 2023年9月4日
0.1.1 2022年11月13日
0.1.0 2022年11月13日

算法 中排名第 1192

Download history 25/week @ 2024-04-14 49/week @ 2024-04-21 9/week @ 2024-04-28 15/week @ 2024-05-05 47/week @ 2024-05-12 54/week @ 2024-05-19 120/week @ 2024-05-26 66/week @ 2024-06-02 45/week @ 2024-06-09 96/week @ 2024-06-16 77/week @ 2024-06-23 10/week @ 2024-06-30 23/week @ 2024-07-07 34/week @ 2024-07-14 28/week @ 2024-07-21 74/week @ 2024-07-28

每月下载量 160

MIT 许可证 MIT

12KB
216

ringstack

ringstack

[RingStack] 是一个使用环形缓冲区的轻量级栈实现。

由于 [RingStack] 是基于环形缓冲区构建的,所以当项目数量达到其限制时, oldest 项会自动在您 [push][RingStack::push()] 时删除。 (因此 [len][RingStack::len()] 方法会饱和到那个限制数。)

它支持 [RingStack::iter()] 方法,该方法返回 Iterator<&T>。它以历史顺序逐个提供项目,从最新到最旧。

尽管 [RingStack] 目前使用 [Vec] 作为其内部结构,但一旦它在 [new][RingStack::new()] 时机分配,则不会发生额外的分配。

示例

use ringstack::RingStack;

let mut s = RingStack::<i32, 3>::new();
assert_eq!(s.peek(), None);

s.push(1);
s.push(2);
assert_eq!(s.peek(), Some(&2));
assert_eq!(s.pop(), Some(2));
assert_eq!(s[0], 1);
assert_eq!(s.get(0), Some(&1));
assert_eq!(s.get(1), None);

s.push(3);
s.push(4);
let v: Vec<i32> = s.iter().map(|e| e.clone()).collect();
assert_eq!(v, vec![4, 3, 1]);

s.push(5);
let v: Vec<i32> = s.iter().map(|e| e.clone()).collect();
assert_eq!(v, vec![5, 4, 3]);

assert_eq!(s.pop(), Some(5));
assert_eq!(s.pop(), Some(4));
assert_eq!(s.pop(), Some(3));
assert_eq!(s.pop(), None);

变更日志

0.2.0

  • 添加了 [len()], [get()] 方法。

  • 实现了 std::ops::Index

  • 更改 [iter()] 返回类型

    &Option<T> 更改为 &T,并且它只迭代有效元素,因为它返回 T 的引用而不是 Option

0.1.1

使 RingStack [Debug] 继承

0.1.0

初始版本

许可证

MIT 许可证 (MIT)

版权 (c) 2022 msr1k

无运行时依赖