2013-05-19 101 views
-1

我有一個單鏈表如下。鏈接到一個文件列表

/*nodeType definitions*/ 
#define INT 1 
#define FLOAT 2 
#define DOUBLE 3 

typedef struct 
{ 
    int nodeType; 
    void* node_data;//this field is also dynamically allocated 
    Node* next; 
}Node; 

節點的數據類型,根據所述節點(nodeType)的類型來改變。那麼如何將這個鏈表存儲在一個文件中。我怎樣才能創建一個新的文件類型的結構?

+3

這是C還是C++?如果它是C++,模板可能是您最感興趣的。 – chris

+0

我如何使用模板創建文件類型? –

+1

@PravindaAmarathunga首先讓我們知道您是否使用C或C++。現在你的問題被標記爲兩個,但你的代碼看起來只有C。 (例如'typedef struct')。你使用的語言會對你得到的答案產生很大的影響。 –

回答

3

這取決於您希望如何使用文件中的數據。

在一個典型的情況下,您只需將鏈表視爲一個序列即可。當您將數據存儲在文件中時,您會忽略這些鏈接,並只存儲數據序列。當你需要重新讀取它時,你可以讀入一條記錄,將它放入節點,讀取另一條記錄,將它放入下一個節點,等等,直到到達文件末尾。

顯而易見的替代方案是,如果您希望能夠將磁盤上的數據視爲鏈接列表 - 即能夠使用最少的修改將序列中間的記錄插入。在這種情況下,您通常會將內存版本中的指針替換爲下一條記錄的文件偏移量。當/如果你想在序列的中間插入,你可以像使用指針一樣來操作,只處理文件偏移量。

+0

我只是想在我關閉我的應用程序時將列表寫入文件,並在稍後打開該程序時將其恢復。就像其他文件一樣(word,.psd,.png ....)。是的,我知道你必須忽略這些鏈接並將該列表存儲爲一個序列。但究竟如何?所有節點的大小都不相同。我聽說有鏈接'基於塊'的方法等等。任何線索從哪裏開始? –

+0

@PravindaAmarathunga:鑑於你(顯然)只有三種節點類型,我可能會在數據之前立即序列化類型字段。當你讀回來時,讀取類型字段,然後用它來告訴你如何讀取當前節點的其餘數據。 –

+0

這樣你的意思是: 「 <2個字節的NODE_TYPE> <其餘爲實際數據> 」 –