使用数组实现图形

时间:2012-05-10 14:03:38

标签: arrays algorithm memory graph

我想实现一个生成图形的工具,该图形的内存将分配在所谓的“磁带”数据结构上。您可以将磁带视为一个元素数组,每个元素都包含“节点ID”,链接到“父节点”以及“子节点”。

我正在寻找的方法是识别阵列中的可用插槽是便宜的,以便在添加新节点时,可以快速识别空插槽。

如果我使用动态数组实现磁带怎么办?在数组大小需要调整大小的情况下,我可以避免将整个磁带复制到新分配的数组吗?

这里有人有任何想法吗?

1 个答案:

答案 0 :(得分:3)

我假设你想事先分配一个大的'磁带',例如成千上万的节点。

你应该结合两个概念:

  • 首先将最后使用的条目存储在磁带上。下次需要新条目时,只需选择上一次使用后的条目即可。
  • 第二个保留一份免费清单。使用磁带条目的前4个字节(或64位的8个字节)作为指向下一个空闲条目的指针。磁带的开头应指向第一个免费入口。

每当释放磁带上的条目时,将其添加到空闲列表中。

每当录像带中需要新条目时:

  • 检查空闲列表中是否有元素。如果有第一个条目并将其从空闲列表中删除
  • 如果空闲列表为空,请使用上次使用的条目,然后立即使用该条目。

您还可以将其与重新分配方案结合使用,在该方案中,您可以保留磁带的总分配大小,并在最后使用的条目到达磁带末尾时重新分配。