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

作者: jack710619 (ECLin)   2014-08-17 16:23:02
開發平台(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
作者: stu87616 (文組工程師)   2014-08-17 21:14:00
你的堆疊預設會有一個以\0為資料的頭 在堆疊推出來的時後會當作一個要輸出的單位 當然因為\0貼不出東西沒差但是你又每次貼東西的時候都加一個空格(方便閱讀?)所以就會導致堆疊在輸出\0的時候就多一個空格了解決辦法應該是不要讓堆疊前面有一個\0當頭 只是這樣就要寫pop push相關判定 當頭是空的時候會有點不一樣或是貼東西的時候 順便的空格都拿掉 眼不見為淨
作者: jack710619 (ECLin)   2014-08-17 21:39:00
如果說像上面stu大大說的pop push相關判定 可以給小弟一些方向嗎?
作者: stu87616 (文組工程師)   2014-08-17 21:41:00
我的作法是初始設為NULL stack=NULL然後push時要先判定stack是否為NULL如果為NULL 就不是把新增的節點加在next而是直接stack=newnode 這樣不過老實說這樣整個code會變比較也比較醜(我認為)^長或是在最後輸出的時候檢查輸出字串 把那顆空節點和附屬的空格刪掉也是蠻省事的作法 (我會這樣
作者: jack710619 (ECLin)   2014-08-17 22:00:00
原來如此,之後試試看結果我是把最開始的那個初始值pop掉......我懂stu大的意思了,是我會錯意了 ,明天來試試看,感謝大大
作者: ppc ( )   2014-08-19 00:19:00
Node *stack=NULL; init那行刪掉用不到 改這兩行就可以了

Links booklink

Contact Us: admin [ a t ] ucptt.com