国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言約瑟夫環的實現

2020-01-26 13:58:05
字體:
來源:轉載
供稿:網友

C語言約瑟夫環的實現

一、典故:

      據說著名猶太歷史學家 Josephus有過以下的故事:在羅馬人占領喬塔帕特后,39 個猶太人與Josephus及他的朋友躲到一個洞中,39個猶太人決定寧愿死也不要被敵人抓到,于是商量了一個自殺方式:

      41個人排成一個圓圈,由第1個人 開始報數,每數到第3人該人就必須自殺,然后再由下一個重新報數,直到所有人都自殺身亡為止。然而Josephus 和他的朋友并不想遵從,Josephus要 他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,于是逃過了這場死亡游戲。

二、用循環鏈表實現

1.約瑟夫環實現

sListNode* JosephCycle(sListNode* pHead, DataType x) {  if(pHead == NULL)  return NULL;  sListNode* cur = pHead;  while(1)  {  DataType m = x;  if(cur->next == cur)  {  return cur;  }  while(--m)  {  cur = cur->next;  }  //delete替換法  cur->data = cur->next->data;  sListNode* del = cur->next;  cur->next = cur->next->next;  free(del);  del=NULL;  } 

2.測試

void TestJosephCycle() {  sListNode* list = NULL;  Push_Back(list, 1);  Push_Back(list, 2);  Push_Back(list, 3);  Push_Back(list, 4);  Push_Back(list, 5);  Push_Back(list, 6);  Push_Back(list, 7);  Push_Back(list, 8);  Push_Back(list, 9);  PrintList(list);  //建環  sListNode* cur = list;  while(cur->next != NULL)  {  cur = cur->next;  }  cur->next = list;  sListNode* ret = JosephCycle(list, 3);  cout<<"Joseph:"<<ret->data<<endl;  //解環  free(ret); //明確知道只有一個節點,直接釋放  ret = NULL; } 

以上就是約瑟夫環的簡單實現,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 临城县| 甘德县| 修水县| 扬州市| 塔河县| 阜康市| 乌兰县| 明水县| 桂平市| 河北省| 阿尔山市| 城步| 鸡东县| 克山县| 昆山市| 法库县| 民和| 越西县| 龙川县| 邹城市| 铜陵市| 凤翔县| 偃师市| 长岭县| 班玛县| 磴口县| 恩施市| 肃宁县| 灵山县| 平顶山市| 甘肃省| 北票市| 秦皇岛市| 咸宁市| 曲阳县| 巴彦县| 民丰县| 平度市| 南皮县| 台安县| 邓州市|