C語言 約瑟夫環的2種實現方法

2022-06-24 09:00:12 字數 1163 閱讀 5440

第一種是最簡單的鍊錶實現方法

#include#include

/*第一種是鍊錶法

首先建立乙個迴圈單鏈表

將每乙個參加該遊戲的人設定為乙個節點

每個節點的data域代表了每個人的編號

總共有n個人參加遊戲

當輪流報數到m的時候,該玩家出局 out

order代表了每個人的報數情況

在刪除節點方面,我選用帶頭節點迴圈單鏈表

引入兩個指標pre和q,當pre是q的前節點

每一次需要刪除q時,只需要動用pre即可

由於是兩個節點,所以當鍊表中只剩乙個節點

即p==q的時候,就是停止迴圈的條件

*/typedef

struct

nodenode,*pointer;

intmain()

tail->next=head->next;

pointer pre=tail;

pointer q=head->next;

int order=1

;

while(pre!=q)

else

}printf(

"\n the winner is %d\t

",pre->data);

}

第二種是數組成環實現

/*

設定乙個參賽者陣列,陣列的名字為gamer

n,m設定與上面的鍊錶設定一樣

number代表參賽者的人數

pos代表當前報數者的位置

當報數者的報數為3時,將其out,然後其陣列置為0

為了使陣列形成環,就需要用到佇列中學到的知識

使用pos=(pos+1)%n

當pos==n-1的時候(陣列的最後一位)

pos+1會變到的陣列的第一位,從而形成閉環 */

intmain()

else

}else

//如果數值為0,則跳過當前元素

pos=(pos+1)%n;

}for(int i=0;i<41;i++)

if(gamer[i]!=0

) printf(

"winner is %d\n

",gamer[i]);

}

C語言約瑟夫環的實現

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

C語言 實現約瑟夫環

鏈式解法 include include typedef struct sqlist sqlist 建立解約瑟夫環需要的鍊錶,該鍊錶不帶頭節點 sqlist creatlist int length p next null 普通鍊錶轉不帶頭結點的迴圈鍊錶,就是將頭指標下移到第乙個節點位置 原來的頭結...

C語言實現約瑟夫環

直接上 define crt secure no warnings include includetypedef struct listnode listnode void create listnode firstnode,int m 建立單向迴圈鍊錶 int i listnode pre fir...