我目前在处理结构数组时遇到了一些麻烦(具体来说,我的数组太大了,占用了 7 兆字节的内存),我开始怀疑我是否真的需要一次声明所有结构并像那样占用内存,而不是在需要新结构时按比例增加它(程序从文件中读取内容,我将文件中的数据存储在结构中;但是它需要从文件中读取的东西的数量是不可预测的)。我可以使用什么替代方法使程序可以引用单个的、唯一的结构,但不需要提前知道结构的确切数量?
问问题
97 次
3 回答
2
链表?或任何其他更高级的数据结构,具体取决于您的目的,但无论如何,一些阅读似乎是有序的 :) 或者如果您正在使用 C++,只需使用 std::list。
于 2012-05-27T22:37:33.100 回答
1
我想到了两种方法:
- 一个可重新分配的数组(可以是结构或指向结构的指针),您需要函数来检查您是否超出界限并重新分配整个数组以防万一(使用
realloc
) - 结构的链表,在需要时自动增长,插入和删除是恒定的,但您不会对元素进行快速随机访问索引
对于链表解决方案,您只需要另一个结构
struct node
{
struct node *prev; // if you want it double linked
struct node *next;
struct data data;
};
选择哪一个主要取决于必须将新项目添加到数据结构中的频率,如果它是批量完成的,那么重新分配会非常有效,否则你会做很多重新分配(你总是可以使用类似于用于hashmaps的那个,并且总是以很大的数量增加它,例如通过加倍容量)。如果您需要快速随机访问,请忘记链接列表。
于 2012-05-27T22:38:04.717 回答
-1
您可以使用 aunion
而不是strust
; 它的内存效率更高,并且不会像 astruct
那样占用内存。
于 2012-05-28T04:39:41.253 回答