使用迴圈鍊錶實現約瑟夫環(圍圈報數問題)

2022-07-17 19:15:11 字數 507 閱讀 9552

剛開始學c,碰到經典的圍圈報數問題,現先將實現**附下:

#include

#include

struct lnode;

typedef struct lnode lnode;

typedef struct lnode *linklist;

struct lnode *create(int s)      //建立單項迴圈鍊錶

}return head;

}void printlist(struct lnode *head)    //列印迴圈鍊錶

while(q!=head);

}printf("\n");

}int main()

else

}printf("\n%d\n",p->data);

剛開始指標定義時都沒有賦值為null,除錯沒錯誤,可是卻無法執行。

書中說,建議定義時如果暫時不使用指標,先賦值為null,我覺得最好這樣做,而且,在使用指標時,都應該判斷一下是否為空。

使用迴圈鍊錶實現約瑟夫環

約瑟夫演算法 n個人圍成一圈,每個人都有乙個互不相同的密碼,該密碼是乙個整數值,選擇乙個作為起點,然後順時針從1到k k為起點人手中的密碼值 數數。數到k的人退出圈子,然後從下乙個開始繼續從1到j 剛退出圈子的人的密碼 數數,數到j的人退出圈子。重複上面的過程,直到剩下最後乙個人。include s...

迴圈鍊錶實現約瑟夫環

約瑟夫問題 有n個人圍坐一圈,從第k個人開始數,數到m的那個人出隊。知道最後乙個人出隊。有11個人,從第2個人開始數,數到3的那個人出隊。如下簡圖 這裡有兩個關鍵 1 建立迴圈佇列 不能有頭結點 2 隔m 1步取出該節點 程式如下 include using namespace std typede...

約瑟夫環 迴圈鍊錶實現

題目 約瑟夫環的一種描述為 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下去,直到所...