DS博客做業04--樹大做業

DS博客做業04--樹大做業

1.樹的存儲結構說明



data:該結點內容
    son:指向該結點的孩子結點
    bro:指向該結點的兄弟結點

2.樹的函數說明

頭文件

函數1:CreatBTree

做用:按照孩子兄弟鏈建文檔樹html

設計思路:數組

補充

函數2:DestroyBTree

做用:銷燬樹函數

函數3:PrintBTree

做用:更新tree文件測試

設計思路:設計

補充

函數4:SeekTag 和 EndTag

做用:尋找指點結點3d

設計思路:指針

補充

函數5:NewTag

做用:插入新標籤調試

設計思路:code

補充

函數6:DeleteTag

做用:刪除指定標籤htm

設計思路:

補充

函數7:FileRead 和 DataChange


做用:對文本進行預處理,FileRead函數是讀取文件單行字符串合併爲一個字符串,DataChange函數是
將文本轉發爲字符串數組

設計思路:

補充

主函數



3.樹結果演示

  • 建文檔樹:
    原html文檔:

建樹tree文檔:

運行界面:

  • 查找元素:

  • 刪除標籤:

  • 插入標籤:

4.碰到問題

  • 問題一:最先思路上的問題。最先讀題的時候,還覺得應該用二叉樹來實現,後來在建結構體時發現不對,文檔樹顯然是一個」多叉樹「的問題,應該採用孩子-兄弟存儲的方式來處理該問題。
  • 問題二:html文檔處理的問題。對於html文檔的處理是一個挺麻煩的問題,是否要採用單個字符單個字符的判斷?在通過討論以後,咱們採用了蔡德鑫的方法,也就是對html文檔進行預處理,將html中的字符串,切割成一段一段的
    字符串,並用一個字符串數組來存儲,以後的建樹直接遍歷該全局字符串數組便可獲取須要的字符串。
  • 問題三:建樹的時候沒有將純文本與非純文本進行區分來創建結點,致使葉子節點不明確。後來建立結點的時候進行一個判斷(用string類的find函數),問題就解決了。
  • 問題四:更新tree.txt文件的函數,咱們最先的思路是隻須要在最先的時候打開一次文件,以後一直傳遞文件指針就好了,無需屢次開閉文件。但到最後,發現文件會出現重複寫的問題。因而,咱們認爲應該先將原文件刪除,因而去網上找了相關資料(remove函數)。可是這個問題,仍是用在調用該函數後關閉再開啓文件解決了......由於這樣就已經能夠輕鬆解決了。
  • 問題五:寫刪除函數的時候沒有考慮到,當待刪除的結點擁有兄弟結點時,若是直接將該節點刪除,會致使其兄弟結點與其父結點的鏈接斷開。解決方法是,在傳參數時多增長一個形參PreBT(傳遞父節點)
    ,這樣,在刪除結點前先判斷是否存在兄弟節點,如有兄弟結點,則需將父節點與待刪除結點的兄弟鏈接,再將該節點刪除;不然,直接刪除。如圖:

5.小結

此次的大做業
    好在:小組分工明確,思路清晰,而且函數遞歸寫的好,而且熟練
    很差:刪除插入的功能不完善,有小bug,查找函數脫離預期,沒法輸出整條路徑,有侷限性

6.小組成員分配說明

範華:完成main函數和其餘同窗的函數與main函數之間的調試和修改
    李謙:參與討論、測試數據
    林鐘鵬:完成NewTag和DeleteTag函數
    蔡德鑫:完成樹的建立CreatBTree函數和PrintBTree函數還有文件的預處理
    白海檳:完成SeekTa函數和博客園
    古錦源:參與討論、PPT編輯、測試數據

7.展現大家討論的照片

相關文章
相關標籤/搜索