0

ソートされた順序で1000万の整数を含むテキストファイルがあります。これらの番号を逆にして別のファイルに書き込むには、Cでプログラムを作成する必要があります。どのデータ構造を使用し、そのような巨大なデータをメモリにコピーする方法は?そして、元に戻すには、fseekを使用するか、データ構造に格納してから元に戻しますか?助けてください。

4

2 に答える 2

2

これを基本的なデスクトップシステムで実行する場合は、(動的)配列以外の特別なデータ構造は必要ありません。

たとえば、最初に1,000個の番号にスペースを割り当て、読み込みを開始し、割り当てがなくなると割り当てサイズを2倍にします。これにより、次のようにアレイが拡張されます。

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 に答える