問題描述:
據說著名猶太歷史學家 josephus有過以下的故事:在羅馬人占領喬塔帕特後,39個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人都自殺身亡為止。然而josephus和他的朋友並不想遵從,josephus要他的朋友先假裝遵從,他將朋友與自己安排在第16個與第31個位置,於是逃過了這場死亡遊戲。
#include
#include
typedef struct node node;
typedef struct list list;
/***@注意頭指標無論什麼操作都不能動,需要用到頭指標的時候,用乙個變數代替頭指標
*/list *initcirlist()
/***尾插法插入節點
*/void listinsert_r(list *list,int insertdata)
/***頭插法插入節點
*/void listinsert_h(list *list,int insertdata)
}bool josephus(list *list)
printf("第%d個人被殺\n", p->next->data);
if (p->next == list->head)
if (p->next==list->rear)
delnode = p->next;
p->next = p->next->next;
p = p->next;
free(delnode);
}printf("最後活下來的是第%d個人", p->data);}}
/***列印鍊錶中的所有資料
*/void showlist(list *list) }}
int main()
//listinsert_h(cirlist, 10);
//listinsert_h(cirlist, 20);
//listinsert_h(cirlist, 30);
//listinsert_h(cirlist, 40);
showlist(cirlist);
josephus(cirlist);
getchar();
return 0;
}
單向環形鍊錶和約瑟夫問題
當n 5 m 2,k 1時出佇列的順序 2 4 1 5 3 乙個節點也能形成環鏈 構建乙個單向的環形鍊錶思路 1.先建立第乙個節點,讓first指向該節點,並形成環形.2.後面當我們每建立乙個新的節點,就把該節點,加入到已有的環形鍊錶中即可.public void addnode int nums ...
單項環形鍊錶介紹和約瑟夫問題
josephu 問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人從1開始報數,數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。先建立第乙個節點,讓 first 指向該節點,並形成環形 後面當我們...
1 6 單向環形鍊錶和約瑟夫問題
約瑟夫問題 實現思路 實現 public class circlesinglelinkedlistdemo 單向環形鍊錶類 class circlesinglelinkedlis children current null 尾指標 指向下乙個節點為頭節點的節點 方便插入,不需要每次都遍歷 for i...