這個程式剛開始寫完的時候爆出了一堆bug。
有幾點要說一下,作為初學者,應該是會不經意間就範的。
1.對迴圈鍊錶的空判斷。
當迴圈鍊錶為空的時候,自身的下一指標指向自身。
2.釋放鍊錶後忘記對最後的指標進行迴圈設定。
#if 0
程式名稱:poker
作用:模擬魔術師發牌
描述:第一張牌為1,第二張牌就要從第二張重新數,為2.第三張就要從四張重新數。
以此類推,大致如下,括號內的值表示位置:
1(1) -> ?(2) -> 2(3) -> ?(4) -> ?(5) -> 3(6).....
#endif
#include #include typedef struct node
node, *linklist;
#if 0
這是注釋,用巨集來寫注釋不會出現巢狀注發布現的錯誤。比如 /*/**/*/ 就會出現錯誤。
名稱:createlist[初始化鍊錶]
呼叫:createlist(linklist l)
作用:生成並初始化13個節點的迴圈鍊錶
引數:linklist l,頭結點
#endif
void createlist(linklist l)
p->data = 0;
r->next = p;
r = p; //尾插法
pokernum--;
} r->next = l; //將尾部的下乙個指標指向頭,形成迴圈鍊錶
}#if 0
名稱:createpork[設定牌序]
呼叫:createpoker(linklist l)
作用:設定牌序,娛樂大眾
#endif
void createpoker(linklist l)
} if(p->data == 0) //當當前節點無值時可以寫入資料}}
}void freelist(linklist l)
l->next=l; //設定頭尾相連,為空表
}void printlist(linklist l)
while (p->next != l) //頭尾相等時,為空表
printf("第 %d 張牌是 %d \n", i, p->data);
}int main()
printf("初始化鍊錶\n");
createlist(l);
printlist(l);
printf("\n\n排序後:\n");
createpoker(l);
printlist(l);
printf("釋放後:\n");
freelist(l);
return 0;
}
魔術師發牌問題(單迴圈鍊錶)
魔術師發牌問題,魔術師拿出13張黑桃撲克牌表演魔術,對底下觀眾講道,我只要數數就知道這張牌是什麼,然後數到1翻出來第一張a,並將a拿出來放到桌子上,用剩下的牌,重新數,數到2拿出來第2張牌.以此內推,求魔術師用怎樣的牌序才能達到此目的。首先分析問題,我們可以得到乙個大致的類似鍊錶牌序為 1 2 3 ...
魔術師發牌問題 迴圈鍊錶
問題描述 魔術師手裡一共有13張牌,全是黑桃,1 13.魔術師需要實現乙個魔術 這是十三張牌全部放在桌面上 正面向下 第一次摸出第一張,是1,翻過來放在桌面上。第二次摸出從上往下數第二張,是2,翻過來 放在桌面上,第一張放在最下面去,等會兒再摸 第三次摸出從上往下數第三張,是3,翻過來放在桌面上,第...
迴圈鍊錶的應用 魔術師發牌問題和拉丁方陣問題
1.魔術師發牌問題 問題描述 魔術師利用一副牌中的13張黑牌,預先將他們排好後疊放在一起,牌面朝下。對觀眾說 我不看牌,只數數就可以猜到每張牌是什麼,我大聲數數,你們聽,不信?現場演示。魔術師將最上面的那張牌數為1,把他翻過來正好是黑桃a,將黑桃a放在桌子上,第二次數1,2,將第一張牌放在這些牌的下...