約瑟夫環是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。
要通過輸入n,m,k三個正整數,來求出列的序列。這個問題採用的是典型的迴圈鍊錶的
資料結構,就是將乙個鍊錶的尾元素指標指向隊首元素。 p->link=head
解決問題的核心步驟:(程式的基本演算法)
1.建立乙個具有n個鏈結點,無頭結點的迴圈鍊錶;
2.確定第1個報數人的位置;
3.不斷地從鍊錶中刪除鏈結點,直到鍊錶為空。
void josephus(int n,int k,int m) //n為總人數,k為第乙個開始報數的人,m為出列者喊到的數
/* p為當前結點 r為輔助結點,指向p的前驅結點 list為頭節點*/
linklist p,r,list; /*建立迴圈鍊錶*/
for(int i=0;i
p=(linklist)malloc(sizeof(lnode));
p->data=i;
if(list==null)
list=p;
else
r->link=p;
r=p;
p->link=list; /*使鍊錶迴圈起來*/
p=list; /*使p指向頭節點*/
/*把當前指標移動到第乙個報數的人*/
while(k--) r=p;p=p->link;
//刪除
/*迴圈地刪除佇列結點*/
while(p->link!=p)
for(i=0;i
r=p;
p=p->link;
r->link=p->link;
printf("被刪除的元素:%4d ",p->data);
free(p);
p=r->link;
printf("\n最後被刪除的元素是:%4d",p->data);
迴圈鍊錶應用 約瑟夫環
約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include includetypedef struct node ...
單向迴圈鍊錶 約瑟夫環
寫個約瑟夫環,檢驗一下自己的學習狀況.include define elemtype int typedef struct lnodesqlist void initlist sqlist l,elemtype n void round sqlist l,int m,int n int main v...
約瑟夫環問題(迴圈鍊錶)
這是一道比較經典的迴圈鍊錶問題,在華為上機筆試中也出現過。約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。includ...