2011-09-24 103 views
0

我正在使用讀寫系統調用合併k-sorted流。文件描述符和系統調用

從文件中讀取第一個整數並對它們進行排序後,應該再次訪問具有最小元素的文件。 我不知道如何做到這一點。我以爲我可以使用像這樣的結構:

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

有人可以告訴我該怎麼做。

感謝

回答

1

雖然讀整數一個接一個不這樣做的一個有效的方法,我會嘗試寫你正在尋找解決方案。然而,這不是一個真正的實現,只是想法。

你的結構應該是這樣的:

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

你需要有一個優先級隊列(http://en.wikipedia.org/wiki/Priority_queue)和prioities確定accourding爲num。

首先從所有文件中讀取第一個數字並將它們插入優先級隊列(pq)。

然後,當pq不爲空時,彈出第一個包含與pq中其他元素相比最小整數的元素。

將第一個元素保存的整數寫入文件。

使用文件指針(fp)嘗試從輸入文件讀取新的整數。

如果EOF(文件結束),然後什麼也不做

否則插入設置NUM在讀一個PQ的新元素。

當循環結束時,關閉所有文件,您將有一個新文件包含輸入文件中的所有元素,並將對它進行排序。

我希望這會有所幫助。