我们有一个文本文件,按排序顺序包含1000万个整数。需要在C中编写程序来反转这些数字并将其写入单独的文件。使用哪种数据结构以及如何在内存中复制如此庞大的数据?对于倒车,我应该使用fseek或存储在某些数据结构中然后反向? 请帮忙。
答案 0 :(得分:2)
如果要在基本桌面系统上运行此功能,则不需要除(动态)阵列之外的特殊数据结构。
只需为例如空间分配空间最初为1,000个数字,启动加载,并在耗尽时将分配大小加倍。这会像这样增长数组:
1,000 -> 2,000 -> 4,000 -> 8,000 -> 16,000 -> 32,000 ->
64,000 - > 128,000 - > 256,000 - > 512,000 - > 1024000
所以它会对realloc()
进行10次调用,这真的应该没问题。
在数组中输入数字后,只需将数字向后循环并将每个数字打印到输出文件中。
当然,您可以使用这样一个事实:您知道有一百万个数字对您有利,并且可以适当地设置初始大小。
答案 1 :(得分:1)
我建议使用固定大小的缓冲区(文件系统的块大小)并从文件末尾读取块,然后将其写入新文件向后读取缓冲区。
这样你就不需要realloc
任何缓冲区(这是一个代价高昂的操作,尽管对于兆字节大小的文件可能没问题)。