看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 小弟我最近再練習資料結構的東西 現在寫到用linked list 做stack 照著書本打的結果 把infix 轉成postfix表示輸出的時候出了一點小問題 並不是什麼太大的錯誤 只是個人有點龜毛 測試過的結果是我linked list初始化的問題 但是我不曉得要怎麼初始化才不會多出那個空格 這個有辦法解嗎? 餵入的資料(Input): 1-1+1-1+1 預期的正確結果(Expected Output): 1 1 - 1 + 1 - 1 + (數字跟數字 / 符號之間都是一個空格) 錯誤結果(Wrong Output): 1 1 - 1 + 1 - 1 + ^這裡多了一個空格 程式碼(Code):(請善用置底文網頁, 記得排版) struct Node //Node 宣告 { char data; Node *next; }; struct Node* init(Node *ptr) //初始化的宣告 { ptr -> data = '\0'; ptr -> next = NULL; return ptr; } 保險起見附上整個檔案 http://ppt.cc/7hjE -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.202.108 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1408263792.A.AE5.html ※ 編輯: jack710619 (36.239.202.108), 08/17/2014 16:27:02
stu87616: 你的堆疊預設會有一個以\0為資料的頭 在堆疊推出來的時 08/17 21:14
stu87616: 後會當作一個要輸出的單位 當然因為\0貼不出東西沒差 08/17 21:15
stu87616: 但是你又每次貼東西的時候都加一個空格(方便閱讀?) 08/17 21:15
stu87616: 所以就會導致堆疊在輸出\0的時候就多一個空格了 08/17 21:16
stu87616: 解決辦法應該是不要讓堆疊前面有一個\0當頭 只是這樣就 08/17 21:17
stu87616: 要寫pop push相關判定 當頭是空的時候會有點不一樣 08/17 21:17
stu87616: 或是貼東西的時候 順便的空格都拿掉 眼不見為淨 08/17 21:18
輸出的時候中間的空格是方便閱讀 不然 1123+- 到底是 1+12-3 還是 11+2-3 呢 所以我覺得中間的空格是必要的 至於多出來的空格 我也知道是那個 \0 在作怪 但是我真的不曉得要怎麼處理 當然換個方式宣告 linked list 就可以解決 但是我想問的是用 struct 建立的 linked list 有辦法解決嗎 雖然說真的不是什麼大問題 :P ※ 編輯: jack710619 (111.242.72.215), 08/17/2014 21:38:10
jack710619: 如果說像上面stu大大說的pop push相關判定 可以給小弟 08/17 21:39
jack710619: 一些方向嗎? 08/17 21:39
stu87616: 我的作法是初始設為NULL stack=NULL 08/17 21:41
stu87616: 然後push時要先判定stack是否為NULL 08/17 21:42
stu87616: 如果為NULL 就不是把新增的節點加在next 08/17 21:42
stu87616: 而是直接stack=newnode 這樣 08/17 21:42
stu87616: 不過老實說這樣整個code會變比較也比較醜(我認為) 08/17 21:43
stu87616: ^長 08/17 21:43
stu87616: 或是在最後輸出的時候檢查輸出字串 把那顆空節點和附屬 08/17 21:45
stu87616: 的空格刪掉也是蠻省事的作法 (我會這樣 08/17 21:45
jack710619: 原來如此,之後試試看 08/17 22:00
呃...... 忘記講 我 init 那邊如果 ptr return NULL 會直接當掉= =" 所以初始設NULL也是不行...... 看來只能試著在輸出的時候調整看看了 ※ 編輯: jack710619 (111.242.72.215), 08/17/2014 22:08:12
jack710619: 結果我是把最開始的那個初始值pop掉...... 08/17 22:21
jack710619: 我懂stu大的意思了,是我會錯意了 ,明天來試試看,感 08/17 22:36
jack710619: 謝大大 08/17 22:36
ppc: Node *stack=NULL; init那行刪掉用不到 改這兩行就可以了 08/19 00:19
我後來也是把code 改成那樣 然後在push 裡面加判斷式 ※ 編輯: jack710619 (36.237.224.43), 08/19/2014 09:05:50