(C語言)單循壞鍊錶和約瑟夫問題

2021-08-21 04:35:27 字數 1202 閱讀 8234

問題描述:

據說著名猶太歷史學家 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...