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

作者: j220584470k (ㄚ正)   2015-06-13 20:37:30
錯誤結果:執行時直接當掉
程式碼:
#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,第二個執行完的指標傳入第三個。可是卡了
一陣子還是沒想到好的改法,想請大家幫忙解惑 謝謝~
作者: LPH66 (-6.2598534e+18f)   2015-06-13 20:51:00
再多一層指標就能傳回東西了
作者: arthur104 (arthur)   2015-06-14 01:05:00
pointer是pass by value的,所以當然無法改值

Links booklink

Contact Us: admin [ a t ] ucptt.com