2011-04-29 113 views
3

對於我們最後一個學期的項目,操作系統類中的每個人都負責實現一個僞「linux文件系統」。這個想法是模擬處理文件,文件夾,更改目錄等等。C中的結構,指針和樹木

我不喜歡在C語言編程時不得不使用字符串和指針,但不幸的是,爲了我的和平,這個項目看起來涉及到兩者。因爲我對指針相當不舒服,所以我希望能夠通過一個理智的檢查來確定底層樹結構的後端實現是否正確。

typedef struct floorNode 
{ 
    char floorName[30]; //the name of the tree node 
    struct floorNode *parentPointer; //this is a pointer to the parent node. Null for the root node. 
    struct floorNode *childPointers[10]; //this is an array holding pointers to up to 10 child nodes. 
    char fileArray[10][30]; //this is an array of 10 'files', each of up to length 30. 
          //for this assignment, strings are the only type of "file" 

} floorNode; 

這是實現在C樹的正確方法?

+8

如果你不喜歡使用指針,那麼你不會在C中做任何事情。順便說一句,大多數語言都有指針,他們只是試圖通過調用引用來隱藏它,但大部分相同的問題都適用。 – 2011-04-29 05:12:39

+0

@mu太短 - 我喜歡參考更好,儘管這可能只是我對他們談話的更多經驗。 – 2011-04-29 05:22:02

+0

所有你想要的只是一個文件系統,它的一個限制是一個目錄中必須少於10個文件和子目錄。我認爲存儲節點的絕對名稱是沒有意義的。我希望你能弄清楚爲什麼 – 2011-04-29 05:22:13

回答

1

這或多或少是正確的數據類型。

我很擔心fileArray[][]。我不認爲這是必要的,除非我誤解了它的目的。爲了得到floorName的孩子,改爲遍歷childPointers[]以獲得孩子的名字。

要考慮節點是否有30個字符串需要考慮的事情是讓它們的存儲空間稍大一點,在這種情況下,這樣就可以使尾隨的NUL總是存在,並且不需要特殊的快速處理來區分一個沒有NUL的30個字符的字符串,以及所有較短的字符串都有一個。

+0

文件數組適用於不是自己的floorNodes的兒童。 (在我的情況下,他們只是簡單的字符串)。現在,隨着我的運氣,我打賭Stack Overflow很快會對我抱怨另一個問題,我抱怨我的樹不工作:P – 2011-04-29 06:05:42

0

你可能想要一個兒童鏈表。你絕對不希望這個指針數組。您還應該考慮如何知道文件是否實際上是一個目錄。

+0

您建議每個節點都有一個鏈接的子節點列表? – 2011-04-29 06:06:31

+0

@Raven夢想家 - 是的。我也認爲目錄和常規文件都是文件,並且應該在樹中作爲相同類型的節點。 – 2011-04-29 06:31:05

+0

這是一個體面的建議。 – 2011-04-29 06:38:28