本組採用的樹的儲存結構為鏈式結構,選擇如圖所示的結構體
name為結點的名稱
levelnum為孩子節點的個數
*children[20]用來指向不同的孩子結點(類似於二叉樹的結構體,且陣列大小這裡取20,不夠可以再增加)
strtok是字串分割函式,作用是將ch字串中的字串分割,分割的規則是在ch碰到與split變數有關的符號,都會將其改成『\0』
例如 split = "<>"
ch = 用strtok分割後ch就變成了html,注意split中若有空格,ch中的空格也會被改成'\0',而且不是碰到 <> 在一起時才會將其改成'\0',只要字串中含有 < 或者 > 都會被其改成'/0'
void creatstr(string *str,int &length)利用這個函式strtok()對讀取到的檔案中的字串進行分割並且存入乙個字串陣列中
比如 檔案中的內容如下
abcd
利用creatstr(string *str,int &length)進行處理後str字串陣列中
str[0] = html
str[1] = head
str[2] = title
str[3] = demo
str[4] = /title
......依次類推
而length就是字串陣列str的大小
利用creatstr()函式得到的字串陣列str[ ]以及其長度length進行建樹,建樹方法如下
建立兩個型別為的棧 s1,s2
for i=0 to length-1 //遍歷str
找到匹配元素後(經過while迴圈後匹配元素此時在s1.top())
}}然後這裡是配對的操作 即**中的1 2 3步驟
str2=str[i]
str2.erase(str2.begin())
用str2儲存str[i],再用erase函式去除'/'字元
str2.begin()是指向str2字串的第乙個字元,str.erase(p)就是刪去str中p對應的字元
所以str2.erase(str2.begin())是將str2字串中的第乙個字串刪去例如 str2=/htmel,經過erase()函式處理後就變成了 html
然後再去找s1中配對的元素
該函式有5個引數btnode *t為樹,
str name所查詢元素的名稱,
int *a為陣列的頭位址,且a[ ]陣列中的元素全部為-1
int flag為孩子結點children[ ]對應的下標,頭節點沒有對應下標就用 -1
int &flag2為了判斷所查詢的元素是否存在,存在時返回0,不存在時返回1
該函式執行結果會把位置編碼儲存再陣列a[ ]中
而位置編碼由上面的樹狀圖來解釋
例如元素e的位置就為00,f的為01,g的為02,h的為10.....
但是經過該函式處理後的陣列a[ ]中a[0]一定為-1,後面的元素也都會是-1
所以陣列a有用的部分就是 for a[1] to a[i] (a[i]的下乙個元素a[i+1]=-1)
例如e的位置編碼為00,則陣列a[10]將會是-1 0 0 -1 -1 -1 -1 -1 -1 -1
f的位置編碼為01,則陣列a[10]將會是-1 0 1 -1 -1 -1 -1 -1 -1 -1
該函式利用上面findpositioncode()函式得到的陣列a[ ],然後進行處理,最後按格式輸出路徑
用遞迴遍歷樹t,然後再按照格式輸出文件樹
(類似於線序遍歷,看**慢慢體會)
1.選擇樹的結構體上花費較多時間
2.建樹演算法為本小組自創的非遞迴演算法,在設計過程中花費較多時間,最後參考算術表示式轉化成中綴表示式的演算法設計出來
3.在設計輸出路徑的功能中,採取先獲取位置編碼然後再進行輸出處理的做法也是本小組自創,在設計過程中也花費較多時間
4.在調式上,因為傳參時忘了加符號&,導致程式崩潰
1.雖然採用了比較不同的結構體,但是採取該結構體後可能會造成空間上的浪費
2.採用該結構體在遍歷時時間複雜度比較高,而且建樹過程較為複雜
3.好處就是建樹的模型比較清晰做法比較獨特
6.小組成員分配說明
main()函式:劉羽 1.5分
creatstr()函式:阮承南 1.5分
creattree()函式:唐洪俊 2分
findpositioncode()函式:沈宇濤 2分
findpositioncode()函式:沈宇濤
creatfiletree()函式:蔡豐俊 2分
:張明海 1分
DS部落格作業04 樹大作業
data 該結點內容 son 指向該結點的孩子結點 bro 指向該結點的兄弟結點 作用 按照孩子兄弟鏈建文件樹 設計思路 補充 作用 銷毀樹 作用 更新tree檔案 設計思路 補充 作用 尋找指點結點 設計思路 補充 作用 插入新標籤 設計思路 補充 作用 刪除指定標籤 設計思路 補充 作用 對文字...
DS部落格作業 樹
在樹這一章節,我們學習的是二叉樹的演算法。樹的構建 一種是直接給樹的順序儲存結構的字串,一種是通過先序遍歷和中序遍歷 或中序遍歷和後序遍歷來構造樹 理解的還比較亂 還 有一種哈夫曼樹的構造。樹的遍歷 比較難的遍歷是層次遍歷,層次遍歷需要利用環形佇列 需複習 來進行操作。線索二叉樹到現在還是傻傻分不清...
部落格作業04 樹
在本章樹的學習中,可以說是掌握得特別虛。因為二叉樹的很多操作中都應用到了遞迴,而在上學期學習遞迴的時候就沒有掌握好,很多時候樹的幾個遞迴 會讓我沉思很久才能屢清楚整個過程,然而看懂 和會寫 還是有很大差別的,本次的pta在課本上可以找到很多相關的 情況下還是完成得跌跌撞撞的,更不敢想象如果是沒有遇到...