約瑟夫環問題(迴圈鍊錶)

2021-06-17 15:58:35 字數 663 閱讀 8887

這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。

約瑟夫環是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

#include#include typedef struct node//節點存放乙個資料和指向下乙個節點的指標

node;

node *link_create(int n)//建立n個節點的迴圈鍊錶

p->pnext = head;//最後乙個節點指向頭部,形成迴圈鍊錶

return head;

}void link_process(node *head,int k,int m)//從編號為k(1<=k<=n)的人開始報數,數到m的那個人出列;

printf("%d ",p->data);

tmp1->pnext= p->pnext;

free(p);

p = tmp1->pnext;

} printf("%d ",p->data);

free(p);

}int main()

約瑟夫環問題(迴圈鍊錶)

轉 約瑟夫環 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include typedef struct n...

迴圈鍊錶 約瑟夫環問題

正好這幾天在看資料結構,覺得鍊錶應用挺廣的,特寫一例項。問題描述 選首領。n個遊戲者圍成一圈,從第乙個開始順序報數1,2,3.凡報到3者退出圈子,最後留在圈中的人為首領。思路 建立乙個包含n個節點的單迴圈鍊錶來模擬n個人圍成的圈。節點的資料域存放遊戲者的編號。在程式中,以刪除節點模擬人退出圈子的處理...

迴圈鍊錶 約瑟夫環問題

假設n個人決定選出乙個領導,將所有人排成乙個圓圈,沿著這個圓圈每次數到m個人就排除對應著者,每當有人出列後,其餘人靠攏,任然保持乙個完整的圓圈,問題就是找出剩下的那個人是誰,這就是所謂的約瑟夫問題。演算法思想 為了以一種迴圈方式排列人群,我們構建乙個迴圈鍊錶,每個人與迴圈左邊的人之間構成乙個鏈結,整...