deque实施选项

时间:2011-05-05 15:19:41

标签: c++ deque

我需要建立自己的双端队列,因为我编程的环境没有这样的东西。我发现自己在如何实现它的两个选择之间徘徊:

  • 我可以管理一个可增长的指针数组,这些指针指向保存数据的数组。问题是,如何确定每个阵列的大小?
  • 我可以有一个大的缓冲区,我定期增长,并基本上在它上面构建一个循环队列。在一定规模之后,这似乎很糟糕,因为大量分配变得难以有效实现。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

对于你的第一个选项,你可以简单地将每个数组的大小加倍,然后再分配它们,或许达到你知道的关于你的应用程序或内存约束的某个上限。

你似乎已经弄明白了。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我会对你的两个选项 - 多个较小的缓冲区进行组合,并将每个“结束”指向另一个,从而基本上成为一个更大的圆形数组。这样你就不需要经常分配缓冲区了。关于辅助缓冲区的大小,我认为Collin的建议很好 - 随着你的规模增加。