此次是作的目錄樹,想到這個能夠和python的目錄爬取結合起來用,就想着搞點好玩的,把網站的可見目錄轉化成樹結構可視化python
因爲沒有對目錄進行文件夾和文件的區分,因此結構體內容仍是比較少的,h是樹的高度,永遠方便後面樹的圖形化
函數
做者有話說:這個函數決定是使用隊列來操做,由於目錄名考慮到會重複,因此要把每個結果輸出出來。將中序遍歷和strcmp結合起來用達到查找目錄的目的,每一次遞歸都會把當前目錄名入隊,方便後面輸出的時候使用,而fromwho是用於判斷當前節點是兄弟仍是孩子,方便將前一項的兄弟或者孩子置爲空,查找到就會由用戶選擇是否要刪除了,若是要刪除就將他傳入DeletePoint函數遞歸刪除測試
做者有話說:
step 1:函數參數
傳入函數的參數有二。一是樹,二是文件指針。
這裏採用的是遞歸法遍歷樹,咱們將文件的開關放在主函數當中,再將文件指針傳到函數中,保證文件開關的正常運行。
step 2:樹的遍歷
這個函數的功能是將創建的樹圖形化輸出到文件中。根據邏輯關係,在這裏咱們要選取先序遍歷。多叉樹的先序遍歷和二叉樹遍歷的寫法是一致的,
只須要將左右孩子分別改爲孩子與兄弟便可。
step 3:初步調試
在結構體的設計當中,爲了便於圖形化加入變量h,在這裏的含義是目錄等級。爲了驗證以上兩個步驟正常實現,先直接輸出到文件當中查看效果。利用T->h來控制tab的輸出,可以初步看出目錄的分級效果。
固然若是在遍歷上的選擇出現錯誤,在這裏也能提前發現。
step 4:輸出格式
這個函數比較麻煩的地方就在於它的格式控制。
在設計前,先打樣估計設計想要的效果,再根據效果圖尋找格式與Tree->h的數學邏輯關係。爲了呈階梯狀圖形化,將奇數級目錄控制爲縱向輸出,偶數級目錄控制爲橫向輸出。再經過repeat和mark進一步控制橫豎tab量動畫
做者有話說:這是建樹的核心函數,思路是這樣的,先讀取site中前面一個目錄名,而後查找當前point的兄弟節點中是否有這個文件存在,若是有就令point等於這個節點,而後用front記錄上一個節點,用frontFlag標記上一個節點是父母節點仍是兄弟節點繼續循環,沒有就建立一個節點初始化後插入,而後令point等於這個節點繼續循環,直到字符串結束。在查找的使用利用strcmp的特性進行插入,就能夠達到排序的目的。網站
做者有話說:原本想嘗試用C語言來實現這個爬取網站的過程,可是想了想以爲意義不大(實際上是不會),因此就用python的bs4庫來實現,借用system函數調用系統命令執行py文件設計
做者有話說:很簡單的一個後序遍歷刪除節點。3d
做者有話說:一行一行地讀取raw_data.txt中地文件,而後偷懶的利用InsertPoint函數將每一行的Tree中去指針
做者有話說:原理仍是比較簡單的,就是訪問網址的源代碼利用bs4提取出html中a標籤的href元素,添加進list型的變量裏面,而後再將這個網址傳入函數當中,重複上述操做,實現簡單遞歸爬取目錄的一個過程,有些href元素比較刁鑽,好比http://rasang.site/example,href裏面只會有/example,這種狀況我沒有去考慮,因此也處理不了這種問題,畢竟此次做業的重心也不在這上面,只是稍微添加一點樂趣罷了調試
做者有話說:
進入界面後用戶須要輸入一個網址用來爬行目錄,結果會保存爲txt也會展現在界面上
爬取網址結束後須要用戶根據上面的結果輸入要查找的目錄名字,若是找到了會詢問用戶是否要刪除這個目錄,刪除後使用StoreTree函數就能夠將結果更新保存到txt圖形化結果中
解決辦法:百度搜索樣例本身學
解決辦法:宏定義fromdad和frombro,用來標記上一個節點是誰
以下:
解決辦法:在這裏進行入隊操做的時候不能使用先序的結構,不然路徑是不對的,使用中序就能夠解決,由於兄弟節點是不能直接入隊的,只有孩子節點能夠入隊,這樣纔是一條路徑
解決辦法:考慮到函數有關乎文件的開關,所以一開始想經過非遞歸的形式進行遍歷,可是代碼比較贅餘。最後選取遞歸的方法,並將文件的開關置外。
解決辦法: 爲了使函數更具彈性,即函數適用對象更普遍,要找到一個合適的數學邏輯關係進行格式控制。經過調試,而且增長條件判斷語句控制格式。
先來講說缺點:一個是在處理文件的時候沒辦法把文件和文件夾分開,這就致使要看後綴名來判斷是否是文件夾。還有一個就是老師在最後展現課上說的,最後將結果輸出到文件裏面的時候重複地寫入文件影響效率,在課上聽老師說能夠保存到同一個string類型變量裏面的時候我才恍然大悟,string類型很靈活,大小不受限制,只要把全部語句都加進去,把回車也加進去,就能夠實現一次性寫入,這點我是真的沒有想到。
再來講說好的地方:自我以爲比較好的一個地方是設置了fromdad和frombro的宏定義,用來區分插入和刪除時上一個節點的類型,方便將後繼置爲NULL。
謝曉淞:
陳玲清:
參與內容:StoreTree函數的實現。
最終得分:
羅小川:
參與內容:DeletePoint函數的實現,展現PPT的製做。
最終得分:
霍淏華:
參與內容:將插入和查找的過程用動畫演示出來,方便同窗理解。
最終得分:
魯俊文:
參與內容:測試bug。理解代碼
最終得分:
嶽小鋼:
參與內容:測試bug。理解代碼
最終得分:
介紹小組成員、參與內容、貢獻度、最後得分