在小作业中,大家已经使用过STL的 std::deque 的头尾插入删除功能,实际上,std::deque 也支持类似普通数组那样的随机下标访问。
在这次大作业中,你需要使用分块链表(Unrolled Linked List)数据结构实现高效的双端队列(Deque),支持快速随机访问与动态容量调整。所需要实现的接口在给定的文件中。
分块链表就是对存储元素进行分块,以加速随机访问等操作。理想情况下,每一块的大小在
这次的大作业不允许使用STL容器,但你可以使用你上次写的双向链表,直接粘贴进 src.hpp 即可。这次任务的几乎所有测试都在下发的文件中,其中带有 memcheck 的测试仅是其原始测试数据更少
的版本,可用作检查内存泄漏和内存错误。
我们在此提供两种可以考虑的实现方式:一种是链表套链表,另一种的链表套循环数组,一般来说后一种实现的效率会更高一些。注:你的实现必须包括动态调整块长的策略,不允许固定块长
.
├── tests/
│ ├── one/ # 功能测试用例
│ ├── two/
│ ├── three/
│ ├── four/
│ ├── two.memcheck/ # 内存检查专用测试
│ └── four.memcheck/
├── (various utility hpp files...)
├── README.md # 你给deque写的文档
└── deque.hpp # 你的deque实现
你需要在 README.md 中给出自己分裂和合并的策略,并说明为什么时间复杂度符合要求。
Note: 如果说明非常清晰,会有额外1-5分加分
另附:最好认真写,因为我们 CR 的时候一定会问
这次大作业的发布时间为2025年3月10日,截止时间是2025年4月7日
[请你在这个区域论述你的策略的正确性]
