推 supercygnus:x-48那個有誤,data本來就是字元型態,不必-48 11/08 22:19
→ supercygnus:union是說如果碰到(就代表要去下一層 11/08 22:20
→ supercygnus:這個節點就沒有data而是一個dlink指向下一層的節點 11/08 22:20
→ supercygnus:q=p->dlink;是說把一開始建的那個節點忽略 11/08 22:21
→ supercygnus:傳回data為a的那個節點的位址 11/08 22:22
OK! 你做得很接近. 還需理解 (a,b,(c)) 這一串符號的意思.
像這樣的general list,其中 '(' 可想成是呼叫一個 begin_of_a_list(...) 函數,
相對 ')' 就是 end_of_a_list(...) 至於 '(', ')', ',' 這些結構符號都要丟掉,
因為 linked structures 已經表達了 (a,b,(c)) 中的資料和結構.
你的ListNode定義就是
struct ListNode {
ListNode *next;
bool is_ref; //指明本結構是包含一筆資料或是參考到另一個串列
union {
char data;
ListNode *ref;
};
};
這樣子做,正確. 另外,所謂data也有很多種類,起碼可以區分是數值還是符號.
至於你的 create(...) 函數, 指標 p 既然是遊動指標,相對 q 就是固定指標指向
此陣列的開頭了. 一開始加個 q = p 並且之後都不要動 q, 應該就可以. 至於尾端
有 free(p) 蠻奇怪的,這個函數就是要生資料結構出來,沒什麼事不會把自己的結構
砍掉.
※ 編輯: yauhh 來自: 118.167.52.241 (11/08 23:20)