Re: [問題] generalized list廣義串列跑不出結果

看板C_and_CPP作者 (喲)時間11年前 (2012/11/08 21:32), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《supercygnus (......)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : DEV C++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 廣義串列建好之後,想把第一個節點的字元印出來可是結果不正確,很怪 : 到底哪裏出問題啊~? 還有要怎麼列出整個串列呢~?? : 餵入的資料(Input): : (a,b,(g)) : 預期的正確結果(Expected Output): : a : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : http://ideone.com/RPmF4e 你程式有些地方,看不懂你做了什麼. 像12-15行, union{ char data; ListNode *dlink; }; 說data和下一個節點的連結是同一個東西. 我想你應該不會這樣用吧. 但一看92行 p->data=x-48; 然後100行 q=p->dlink; 然後 free(p); return q; 你拿到的q是個什麼東西? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.52.241

11/08 22:19, , 1F
x-48那個有誤,data本來就是字元型態,不必-48
11/08 22:19, 1F

11/08 22:20, , 2F
union是說如果碰到(就代表要去下一層
11/08 22:20, 2F

11/08 22:20, , 3F
這個節點就沒有data而是一個dlink指向下一層的節點
11/08 22:20, 3F

11/08 22:21, , 4F
q=p->dlink;是說把一開始建的那個節點忽略
11/08 22:21, 4F

11/08 22:22, , 5F
傳回data為a的那個節點的位址
11/08 22:22, 5F
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)
文章代碼(AID): #1GcxHJjN (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GcxHJjN (C_and_CPP)