2011-09-24 22 views
0

私は、読み書きシステムコールを使用してkソートストリームをマージしています。ファイル記述子とシステムコール

ファイルから最初の整数を読み込んでソートした後、最小の要素を持つファイルに再度アクセスする必要があります。 これを行う方法がわかりません。

struct filePointer { 
int ptr; 
int num; 
}fptr[5]; 

誰かが私にこのようにする方法を教えてもらえますか?

おかげ

答えて

1

読ん整数一つ一つがこれを行うための効率的な方法ではありませんが、私はあなたが探しているソリューションを書くことを試みます。これは実際の実装ではなく、単にアイデアです。

あなたの構造は次のようにする必要があります:あなたはプライオリティキュー(http://en.wikipedia.org/wiki/Priority_queue)を持っている必要がありますし、prioitiesがNUMにaccourdingを決定している

struct filePointer { 
FILE * fp; 
int num; 
} fptr[k]; /* I assume k is constant, known at compile time */ 

最初にすべてのファイルの最初の数字を読み取り、優先度キュー(pq)に挿入します。

pqが空ではない間に、pqの他の要素と比較して最小の整数を保持する最初の要素をポップします。

最初の要素が保持する整数を書き込みます。

ファイルポインタ(fp)を使用すると、入力ファイルから新しい整数を読み取ろうとします。

EOF(ファイルの終わり)は、何も

は、リード1にNUMを設定することにより、PQに新しい要素を挿入しないでください場合。

ループが終了したら、すべてのファイルを閉じます。入力ファイルのすべての要素を含む新しいファイルが作成され、ソートされます。

こちらがお役に立てば幸いです。

関連する問題