#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
int num;
struct Node* Next;
} Person;
typedef struct Node* PersonList;
// 創(chuàng)造一個包含41個人的單循環(huán)鏈表
// 并給她們按1~41開始編號
void CreatePersonList(PersonList* PL, int n)
{
int length = 0;
*PL = (PersonList)malloc(sizeof(Node));
(*PL)->Next = *PL;
(*PL)->num = length; // 頭結(jié)點(diǎn)數(shù)據(jù)域保存鏈表的長度
PersonList pHead = *PL;
PersonList pNew;
int i = 1;
while(i <= n){
length++;
pNew = (PersonList)malloc(sizeof(Node));
pNew->num = i++;
pHead->Next = pNew;
pHead = pNew;
}
pNew->Next = (*PL)->Next;
(*PL)->num = length;
}
// 打印鏈表
void PrintList(PersonList L)
{
PersonList pt = L->Next;
while (pt->Next != L->Next) {
printf("%d ", pt->num);
pt = pt->Next;
}
printf("%d ", pt->num);
printf("\n");
}
// 約瑟夫問題
// 打印死亡編號
void PrintDeadNo(PersonList *PL)
{
PersonList p = *PL; // 第一個人開始報數(shù)
PersonList q;
int i = 0;
printf("死者編號:");
while (p != p->Next) {
p = p->Next;
i++;
if (i == 2) {
i = 0;
q = p->Next;
printf("%d ", q->num);
p->Next = q->Next;
free(q);
(*PL)->num--;
if((*PL)->num < 3){
break;
}
}
}
printf("\n幸存者:");
for(int i = 0; i < (*PL)->num; i++){
q = p->Next;
printf("%d ", q->num);
p->Next = q->Next;
}
printf("\n");
}
int main()
{
/*
用循環(huán)鏈表模擬約瑟夫問題,把41個人自殺的順序編號輸出
*/
PersonList pl;
CreatePersonList(&pl, 41);
PrintDeadNo(&pl);
return 0;
}
2020-08-21[循環(huán)鏈表模擬約瑟夫問題]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。