德克实现选项

deque implementation options

本文关键字:选项 实现 德克      更新时间:2023-10-16

我需要构建自己的deque,因为我编程的环境没有这样的东西。我发现自己在如何实现它的两个选择之间左右为难:

  • 我可以管理一个可扩展的指针数组,指向保存数据的数组。问题是,如何确定每个辅助数组的大小?
  • 我可以有一个定期增长的大型缓冲区,并在其上构建一个循环队列。在一定规模之后,这似乎很糟糕,因为大量分配越来越难以有效完成。

有什么想法吗?

对于第一个选项,您只需在分配每个数组时将每个数组的大小比以前的数组大小加倍,也许最高可达某个上限,具体取决于您对应用程序或内存约束的了解。

你似乎已经想通了。

为什么不只是一个简单的双向链表?您需要快速随机访问吗?

另一种方法是拥有向量列表(固定大小)。列表作为第一个DS的好处是您可以在头部和尾部以及两者之间添加元素。具有固定大小矢量的好处是您可以模拟二维数组,行的添加/删除是恒定时间。现在假设你想加头。您应该在 head 的列表中添加一个节点( const 时间 ),然后在固定大小向量的最后一个添加条目。因此,当取消排队已经有数据时,请考虑头部的任何条目,您将在第一行的最后一列插入。如果行中有可用空间,则在头部的任何进一步插入都将发生在第一行的倒数第二个未填充列中。其他明智的人重复相同的步骤。末尾的正常插入通常作为列表向量的末尾发生,其中插入从向量的开头发生。

我会做两个选项的组合 - 多个较小的缓冲区,并让每个"结束"指向另一个,本质上成为一个更大的圆形数组。 这样,您就不需要几乎经常分配缓冲区。 至于二级缓冲区的大小,我认为 Collin的建议是一个很好的建议 - 随时增加大小。