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