这个问题与语言无关(尽管它假设一个既是程序性的又是OO)。
我无法找到具有以下行为的集合的标准名称:
- N个元素的固定容量,保持插入顺序。
-Elements被添加到'Tail'
- 无论何时添加项目,都会返回集合的头部(FIFO),但不一定要删除。
- 如果该集合现在包含多于N个元素,则删除头部 - 否则它将保留在集合中(现在已进一步朝向最终删除)。
我经常使用这种结构来保持运行计数 - 即过去N帧的帧长度,以便提供我可以平均,求和等的“移动窗口”。
答案 0 :(得分:5)
听起来和我circular buffer非常相似;除了您可能未定义或过度约束添加/删除行为。
请注意,循环缓冲区有两个“视图”。一个是布局视图,其中有一段内存被写入,带有“head”和“tail”索引,以及当尾部“在”头部之前“缠绕”一些逻辑。另一个是一个“逻辑”视图,你的队列没有暴露它的布局方式,但肯定有一个有限数量的插槽可以“增长到”。
在进行计算的环境中,有一个我喜欢的非常长期的项目(尽管如果你不习惯这样的事情,cli界面有点外来)。它被称为RoundRobinDatabase,其中每个数据库准确存储单个值的N个副本(提供图形,平均值等)。它根据许多参数调整下一个bin,但最常见的是它会根据时间推进bin。它通常是大量网络吞吐量图背后的工具,它具有可配置的bin冲突解决方案等。
一般来说,对最后“一些”条目敏感的算法通常被称为“滑动框”算法,但这侧重于算法,而不是数据结构:)
答案 1 :(得分:1)
编程谜语听起来像是 circular linked list 。
嗯,所有这些描述都适合,不是吗?
•N个元素的固定容量,保持插入顺序。
•元素被添加到“尾巴”
•每当添加一个项目时,都会返回集合的头部(FIFO),但不一定要删除。
这个包含计算框架的源代码的链接也可能有帮助: frameCounter