資料結構 單項迴圈鍊錶解決約瑟夫問題

2021-09-04 17:59:25 字數 1199 閱讀 4375

x個人圍成一圈,每個人手裡都有不同的密碼,選擇乙個人,從他開始,以他的密碼為初始開始報數,如果有人報的數字為1,這個人退出並且以退出這個人手中的密碼作為新的起始,直到所有人都出列他為止

//標頭檔案 不說了

struct man

;typedef struct man node;

typedef node* ptr;

int main()

ptr creatlink

(int num)

last = head;

//將頭結點的位址賦值給尾結點

for(i =

0; i < num; i++

)//迴圈輸入所有人的密碼放到對應的結點的對應資料域(對應的次序)

previous-

>next = last;

} previous-

>next = head;

//迴圈結束,多餘的結點不需要,最後乙個結點直接指向頭結點,形成迴圈

free

(last)

;//釋放多餘的結點

last = previous;

//最後乙個結點複製給last結點

return last;

}void

show

(ptr head, int num)

previous-

>next = last-

>next;

//尾指標的下乙個指標複製給當前指標的下乙個指標

printf_s

("%d"

, last-

>num)

;//列印尾指標的資料域的序號

num1 = last-

>password;

//將尾指標資料域的密碼賦值給num1;

free

(last)

;//釋放尾指標

last = previous-

>next;

//將當前指標的指標域next指向尾指標

}}

C語言 資料結構迴圈鍊錶解決約瑟夫環問題

用c語言實現迴圈鍊錶解決問題 具體測試 假設有n個人圍成一圈,然後對每個人按順序編號1,2,3,n,規定從1號按順序開始報數,報到k的人出局,之後下乙個人再從1開始報數,報到k的人在出局,一直進行下去,問 最後乙個出局者為幾號?假設有8個人,每次報數報到4的人出局,則過程如下。四號出局 八號出局 五...

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

最近開始複習資料結構,今天手寫了乙個約瑟夫迴圈問題。首尾相連的鍊錶 head last tail tail next head 建立迴圈鍊錶和建立普通鍊錶方法差不多,只需要首尾相連即可 已知 n 個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍,從編號為 k 的人開始順時針報數,數到 m 的那...

迴圈鍊錶解決約瑟夫 問題

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