DS博客大做業--樹(李天明組)

DS博客大做業--樹

#大做業博客要求 (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.碰到問題

  • Q1: 區分文件跟txt。
  • A1: 在結構體中增長一個變量。
  • Q2: 孩子結點排序混亂。
  • A2: 採用分段查找法,找到插入位置而後調用Tool函數插入結點,保證孩子結點有序。
  • Q3: 增長目錄時,查找插入的位置。
  • A3: 用compear比較樹中的str與Data中的str的大小,若都相等則該目錄已存在,否找找到插入位置。

##5.小結

.好的地方:結構體簡潔明瞭,可讀性好。功能比較完善。
函數都主要分裝在一個文件裏,概括性強。
.須要改進的地方:暫無發現太大問題

##6.小組成員分配說明

##7.展現大家討論的照片

相關文章
相關標籤/搜索