[問題] 河內塔用堆疊實作時產生的問題

看板C_and_CPP作者 (ㄚ正)時間9年前 (2015/06/13 20:37), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
錯誤結果:執行時直接當掉 程式碼: #include <stdio.h> #include <stdlib.h> struct node { char data; struct node *next; }; typedef struct node NODE; NODE* creatStack(); NODE* push(NODE* top, char data); NODE* pop(NODE* top); void display(NODE* top); void haoni(int n, NODE* A, NODE* B, NODE* C); int main(void) { NODE* stackA_top = creatStack(); NODE* stackB_top = creatStack(); NODE* stackC_top = creatStack(); stackA_top = push(stackA_top,'5'); stackA_top = push(stackA_top,'4'); stackA_top = push(stackA_top,'3'); stackA_top = push(stackA_top,'2'); stackA_top = push(stackA_top,'1'); haoni(5, stackA_top, stackB_top, stackC_top); } void haoni(int n, NODE* A, NODE* B, NODE* C) { if(n == 1) { char data = A->data; A = pop(A); C = push(C,data); } else { haoni(n-1, A, C, B); haoni(1, A, B, C ); haoni(n-1, B, A, C); } } 補充說明:已找出問題出在else裡的三個haoni,這樣的寫法導致三個haoni裡的指標 A、B、C都是一開始的值,而正確的方法應該是第一次haoni執行完被改變 的指標再傳入第二個haoni,第二個執行完的指標傳入第三個。可是卡了 一陣子還是沒想到好的改法,想請大家幫忙解惑 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.214.137 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434199053.A.D90.html

06/13 20:51, , 1F
再多一層指標就能傳回東西了
06/13 20:51, 1F

06/14 01:05, , 2F
pointer是pass by value的,所以當然無法改值
06/14 01:05, 2F
文章代碼(AID): #1LV2GDsG (C_and_CPP)