問題描述:
設編號為1,2,、、、,n(n>0)的人按順時針方向圍坐一圈,每人持有乙個正整數密碼。開始時任意給出乙個報數上限值m,從第乙個人開始沿順時針方向自1起順序報數,報到m時停止報數,報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人起重新自1起順序報數;如此下去,直到所有人全部出列為止。
基本要求:
<1>初始上限值m和測試資料在程式中確定;
<2>用帶頭結點的單迴圈鍊錶作資料元素的儲存結構;
<3>把帶頭結點的單迴圈鍊錶作為抽象資料型別設計;測試資料:n=7;七個人的密碼:3,1,7,2,4,8,4.初始報數上限m=20.
本人編的源**:
#include
#include
#define null 0
typedef struct node
lnode,*linklist;
linklist creat_linklist(int personnum) //在單鏈表的尾部插人結點建立單鏈表,並完成
r->next=l->next; //讓單鏈表迴圈起來;
return l; //返回頭結點;
} void joseph(linklist head,int key,int personnum) //約瑟夫問題的實現;
key=p->code;
couts->next=p->next; //刪除p所指的結點;
head=s; //確立下一次迴圈開始的位置;
free(p); //釋放出列人所在結點的空間;
personnum--; //結點數減一;
} }
void main()
約瑟夫環實現
約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 1 2 3 4 5 6 7 8 3,6 出圈 剩下7 8 1 2 4 5 7 8...
約瑟夫環的實現
用迴圈鍊錶實現的,思路很簡單,只是要注意指標的修改,程式設計基礎差的容易出錯。約瑟夫環 迴圈鍊錶實現 author milo.wang date 2012 9 15 include using namespace std typedef struct node node,nodeptr void j...
約瑟夫環的實現
首先介紹一下約瑟夫環 約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 ...