約瑟夫環的迴圈鍊錶實現

2021-08-21 22:53:15 字數 1882 閱讀 6819

#include

#include

#define number 13 //可以通過輸入確定人的個數

#define next 8 //確定報數的間隔數

#define length sizeof(men)

#define null 0

struct men

;typedef struct men men;

/********************************************/

/* 約瑟夫環的迴圈鍊錶實現*/

/********************************************/

void main()

pone->pmen = phead;

/**進行操作

*/ptwo = phead;

pone = ptwo->pmen;

while(pone->pmen != ptwo)

//if(pone == phead)//對於單向鍊錶的頭指標刪除問題已經不存在

//phead = pone->pmen;

//else

ptwo->pmen = pone->pmen;

pone = null;

free(pone);

pone = ptwo->pmen;

pone = pone->pmen;

ptwo = ptwo->pmen;//保持初始狀態

}printf("%d\n", pone->number);

對於每一位都有乙個位權的實現:

#include

#include

#define length sizeof(men)

#define null 0

struct men

;typedef struct men men;

//// 約瑟夫環的迴圈鍊錶實現

//void main()

////初始這個鍊錶,對頭結點進行賦值

//phead->number = 1;

printf("請輸入第1位的密碼:");

scanf("%d", &phead->code);

for (client = 2; client <= number; client++)

ptwo->pmen = pone;

pone->number = client;

printf("請輸入第%d位的密碼:", client);

scanf("%d", &pone->code);

ptwo = pone;

}pone->pmen = phead;

printf("\n被選出的次序:\n");

////進行操作

//ptwo = phead;

pone = ptwo->pmen;

while(pone->pmen != ptwo)

//if(pone == phead)//對於單向鍊錶的頭指標刪除問題已經不存在

//phead = pone->pmen;

//else

ptwo->pmen = pone->pmen;

////釋放不用的結點

//printf(" %d ", pone->number);

next = pone->code;

pone = null;

free(pone);

pone = ptwo->pmen;

pone = pone->pmen;

ptwo = ptwo->pmen;//保持初始狀態

}printf("%d", ptwo->number);

printf("\n最後留下的是:%d\n", pone->number);

}

迴圈鍊錶實現約瑟夫環

約瑟夫問題 有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報數,如此下去,直到所...

約瑟夫環,迴圈鍊錶實現

約瑟夫環的定義就不再贅述,直接上 如果朋友能看完這個 相信你能理解接下面這個小故事。有個人想從這個世界上消失,但是他又不想死,他想到了乙個辦法,他可以把另外乙個人殺了,然後再用這個人的身份生活下去。這個小故事與約瑟夫環無關 include include struct node int main e...