迴圈鍊錶實現約瑟夫問題

2021-10-18 16:20:40 字數 2479 閱讀 7431

高階約瑟夫問題

總結

初學資料結構的迴圈鍊錶,正好利用迴圈鍊錶可以很容易的解決上述問題。

#include

#include

#include

typedef int elemtype;

#define len sizeof

(node)

#define n

41//總人數 41

#define m 3

//密碼固定為3

typedef struct node

node;

typedef struct node linklist;

linklist*

creat_list()

;void

out_list

(linklist *l)

;void

ysf_out_list

(linklist *l)

;void

main()

// 《初始化函式》

linklist*

creat_list()

p->next = h-

>next;

free

(h);

return p;

}// 《初始化鍊錶輸出函式》

void

out_list

(linklist *l)

if(i ==n)

i++;}

//printf("\n%d\n",p->next->data); //僅用於測試

printf

("\n\n");

}// 《約瑟夫環問題函式》

<1> 每個節點多了乙個密碼域,用來儲存各自的報數上限。

<2> 相比簡單的約瑟夫問題,只需要克服密碼值會動態變換的問題即可,利用迴圈鍊錶對上述**簡單修改即可。

// ★★★假設共有5個節點(如果想增加更多的節點,可以在巨集定義中,僅修改n的值即可)★★★

#include

#include

#include

typedef int elemtype;

#define len sizeof

(node)

#define n

5//★★★總人數確定值,本例假設為 5

typedef struct node

node;

typedef struct node linklist;

linklist*

creat_list()

;void

out_list

(linklist *l)

;void

ysf_out_list

(linklist *l)

;void

main()

linklist*

creat_list()

p->next = h-

>next;

free

(h);

return p;

}// 《初始化鍊錶輸出函式》

void

out_list

(linklist *l)

if(i ==n)

i++;}

//printf("\n%d\n",p->next->data); 僅僅用於測試,可以忽略

printf

("\n\n");

}// 《高階約瑟夫環問題》

初學資料結構,繼續加油!!!!

迴圈鍊錶實現解決約瑟夫問題

typedef struct tag circlelist 頭節點 tcirclelist circlelist circlelist creat memset ret,0,sizeof tcirclelist ret header.next null ret slider null ret len...

約瑟夫問題的迴圈鍊錶實現

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

迴圈鍊錶 約瑟夫問題

設編號分別為 1,2,n的n個人圍坐一圈。約定序號為k 1 k n 的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。演算法思路 1 先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。2 找到第k個結點,即第乙個開始報數的人...