[問題] 用sturct做的linked list實作stack問題

看板C_and_CPP作者時間9年前 (2014/08/17 16:23), 9年前編輯推噓3(3019)
留言22則, 3人參與, 最新討論串1/1
開發平台(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

08/17 21:14, , 1F
你的堆疊預設會有一個以\0為資料的頭 在堆疊推出來的時
08/17 21:14, 1F

08/17 21:15, , 2F
後會當作一個要輸出的單位 當然因為\0貼不出東西沒差
08/17 21:15, 2F

08/17 21:15, , 3F
但是你又每次貼東西的時候都加一個空格(方便閱讀?)
08/17 21:15, 3F

08/17 21:16, , 4F
所以就會導致堆疊在輸出\0的時候就多一個空格了
08/17 21:16, 4F

08/17 21:17, , 5F
解決辦法應該是不要讓堆疊前面有一個\0當頭 只是這樣就
08/17 21:17, 5F

08/17 21:17, , 6F
要寫pop push相關判定 當頭是空的時候會有點不一樣
08/17 21:17, 6F

08/17 21:18, , 7F
或是貼東西的時候 順便的空格都拿掉 眼不見為淨
08/17 21:18, 7F
輸出的時候中間的空格是方便閱讀 不然 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

08/17 21:39, , 8F
如果說像上面stu大大說的pop push相關判定 可以給小弟
08/17 21:39, 8F

08/17 21:39, , 9F
一些方向嗎?
08/17 21:39, 9F

08/17 21:41, , 10F
我的作法是初始設為NULL stack=NULL
08/17 21:41, 10F

08/17 21:42, , 11F
然後push時要先判定stack是否為NULL
08/17 21:42, 11F

08/17 21:42, , 12F
如果為NULL 就不是把新增的節點加在next
08/17 21:42, 12F

08/17 21:42, , 13F
而是直接stack=newnode 這樣
08/17 21:42, 13F

08/17 21:43, , 14F
不過老實說這樣整個code會變比較也比較醜(我認為)
08/17 21:43, 14F

08/17 21:43, , 15F
^長
08/17 21:43, 15F

08/17 21:45, , 16F
或是在最後輸出的時候檢查輸出字串 把那顆空節點和附屬
08/17 21:45, 16F

08/17 21:45, , 17F
的空格刪掉也是蠻省事的作法 (我會這樣
08/17 21:45, 17F

08/17 22:00, , 18F
原來如此,之後試試看
08/17 22:00, 18F
呃...... 忘記講 我 init 那邊如果 ptr return NULL 會直接當掉= =" 所以初始設NULL也是不行...... 看來只能試著在輸出的時候調整看看了 ※ 編輯: jack710619 (111.242.72.215), 08/17/2014 22:08:12

08/17 22:21, , 19F
結果我是把最開始的那個初始值pop掉......
08/17 22:21, 19F

08/17 22:36, , 20F
我懂stu大的意思了,是我會錯意了 ,明天來試試看,感
08/17 22:36, 20F

08/17 22:36, , 21F
謝大大
08/17 22:36, 21F

08/19 00:19, , 22F
Node *stack=NULL; init那行刪掉用不到 改這兩行就可以了
08/19 00:19, 22F
我後來也是把code 改成那樣 然後在push 裡面加判斷式 ※ 編輯: jack710619 (36.237.224.43), 08/19/2014 09:05:50
文章代碼(AID): #1Jy6Pmhb (C_and_CPP)