#大做業博客要求 (10分)函數
##1.樹的存儲結構說明spa
.樹採用的是鏈式存儲結構。 .這段代碼中定義了兩個結構體。第一個是自定義爲Name類型的結構體,裏面的成員有字符串str和類型爲整型的判斷變量flag(判斷是目錄名仍是文件)。 第二個結構體自定義爲BTNode類型,裏面的成員有Name類型的data(用於存放樹結點),還有兩個結構體指針分別指向兄弟結點和孩子結點。
###1.1頭文件1TreeNode.h設計
(定義結構體)3d
###1.2.頭文件2 TreeFunction.h指針
(聲明函數,方便後續函數使用時的調用)code
###1.3.其餘兩個文件:tree.cpp、input.cpp裏包含的內容都是對各類函數功能的實現blog
##2.樹的函數說明排序
###主函數.main.cpp遞歸
定義變量,控制輸出輸入的內容等
###函數1.BTree ReadFile()函數字符串
.功能:讀取file文件和建立樹結點。 .設計思路:定義一個字符串用來存從文件中讀取出來的字符,同時調用另外一個函數建立樹結點,最後將BT返回主函數。
###函數2. void CreateNode(BTree &BT, string name)
.功能:建立樹結點。 .設計思路:對字符串一段一段判斷,以\和\0做爲中止的點,定義flag用於區分插入位置,定義judge用來判斷是否找到插入位置,定義一個結構名pre,根據name[i]是否是文件對pre.flag進行賦值,而後再根據它是文件仍是目錄進行建立結點
###函數3.void PrintTree(BTree BT, int k)
.功能:輸出樹。 .設計思路:遍歷樹中全部結點,判斷該結點是否是文件,如果文件,則以該樹的兄弟樹做爲遞歸出口按照格式輸出樹,若不是,則以該樹的孩子樹做爲遞歸出口按照格式輸出樹
###函數4.void FindRoute(BTree &BT,int &flag,vector <string> &s,string name)
.功能:查找路徑。 .設計思路:用兄弟孩子樹作遞歸出口。比較name與data.str的大小關係,若相等 ,說明找到該文件,而後在目錄樹中尋找路徑,並把它按照格式輸出。
###函數5.void DeleteNode(BTree &BT)
.功能:刪除數據 .設計思路:以讀取的方式打開文件,查找是否有須要刪除的結點,若找不到,則輸出找不到此目錄,不然,用鏈式結構的方式刪除所繫結點,並寫入文件,達到刪除目錄的目的。
###函數6.void IncreaseNode(BTree &BT)
.功能:增長數據 .設計思路:定義一個Data,把須要增長的目錄名賦給Data中的str,而後再與樹中的str進行比較,若相等,則輸出「已存在」,不然,調用Tool函數插入該結點。
###函數7.void FileWrite(BTree BT,ofstream &write,vector<string> &s)
.功能:修改文件 .設計思路:判斷樹的孩子結點是否爲空,不爲空時,把字符串存在vector裏,再遞歸調用該函數自己,用於有共同路徑的數據輸到文件 。
###函數8.int Tool(Name pre, BTree &Head, BTree &T, int flag)
.功能:有序地插入結點 .設計思路:判斷該結點是文件仍是目錄,並比較str的大小 ,創建一個新結點,若爲文件,把樹T看成該結點的孩子 ,不然,把它看成該結點的兄弟。而後再根據已經查找所要插入的位置進行插入。
##3.樹結果演示
###3.1.生成目錄樹
根據file.txt中的文件路徑,生成一顆對應的目錄樹,並把樹結構保存在tree.txt中。目錄樹中,孩子節點從左到右按照字符串字典序排序。
###3.2.查找目錄
輸入一個文件名,能在目錄樹查找其路徑,並把查找路徑按照格式輸出。
###3.3.刪除目錄
輸入一個刪除目錄,能把該節點及其全部分支都刪除.更新tree.txt
###3.4.增長目錄
輸入一個新路徑,若該路徑不存在,能在樹中插入一個新分支。並更新tree.txt
##4.碰到問題
##5.小結
.好的地方:結構體簡潔明瞭,可讀性好。功能比較完善。 函數都主要分裝在一個文件裏,概括性強。 .須要改進的地方:暫無發現太大問題
##6.小組成員分配說明
##7.展現大家討論的照片