如何在不制作数组的情况下串行声明结构?

时间:2012-05-27 22:33:56

标签: c arrays pointers memory-management struct

我目前在使用结构数组时遇到了一些麻烦(具体来说,我的数组很大,占用了7兆字节的内存),我开始质疑我是否真的需要声明所有的结构在这种情况下并且像这样占用内存,而不是在需要新结构时按比例递增(程序从文件中读取内容,并将结果中的文件数据存储起来;但需要读取的内容数量)从文件是不可预测的)。我可以使用哪种替代方案,以便程序可以引用单独的,独特的结构,但不需要提前确定结构数量?

3 个答案:

答案 0 :(得分:2)

Linked lists?或任何其他更高级的数据结构,取决于你的目的,但无论如何一些阅读似乎是有序的:)或者如果你正在做C ++,只需使用std :: list。 / p>

答案 1 :(得分:1)

我想到了两种方式:

  • 一个可重新排序的数组(可能是结构或指向结构的指针),你需要函数来检查你是否超出边界并重新分配整个数组以防万一(realloc
  • 结构的链接列表,在需要时自动增长,插入和删除是不变的,但您不会对元素进行快速随机访问索引

对于链表解决方案,您只需要另一个结构

struct node
{
  struct node *prev; // if you want it double linked
  struct node *next;
  struct data data;
};

选择哪一个主要取决于必须将新项目添加到数据结构的频率,如果它是批量完成的,那么重新分配将非常有效,否则你将做很多reallocs(你总是可以使用类似于用于散列图的方法,并且总是递增大量,例如通过加倍容量)。如果您需要快速随机访问,请忘记链接列表。

答案 2 :(得分:-1)

您可以使用union代替strust;它的内存效率更高,并且不像struct那样占用内存。