C 實現約瑟夫環的迴圈單鏈表

2022-09-21 21:57:18 字數 1305 閱讀 6604

約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知 n 個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。. 從編號為 k 的人開始報數,數到 m 的那個人出圈;他的下乙個人又從 1 開始報數,數到 m 的那個人又出圈;依此規律重複下去,直到剩餘最後乙個勝利者。. 例如:有10個人圍成一圈進行此遊戲,每個人編號為 1-10 。. 若規定數到 3 的人出圈。. 則遊戲過程如下。. (1)開始報數,第乙個數到 3 的人為 3 號,3 號出圈。. 1, 2, 【 3 】, 4, 5, 6, 7, 8, 9, 10。. (2)從4號重新從1開始計數,則接下來數到3的人為6號,6號出圈。

廢話不多說,直接上**:

下面是標頭檔案,命名為」約瑟夫環.h「

#ifndef josephus_circle//判斷是否被定義過josephus_circle

#define josephus_circle

struct node//定義乙個結構體,用來表程式設計客棧示每乙個結點 ;

class josephus//定義乙個類,裡面包含有三個介面,和兩個私有成員變數

;#endif

下面是介面的具體實現,命名為「約瑟夫環.cpp」

#include//引入輸入輸出流

#include"約瑟夫環.h"//引入約瑟夫環標頭檔案

using namespace std;

josephus::josephus(int n)

rear->next = first;//在迴圈過後,將尾結點和頭節點連線起來,構成迴圈鍊錶

}josephus::~josephus()

delete rear;//在刪除完成後,剩下的最後就只有尾結點了,刪除即可

} else }

void josephus::resultshow(int m)

else//每次count=m時候就開始刪除對應結點

}cout << pjapxuuoj->data << endl;//這最後乙個就是最後出圈的結點,也就是所謂的勝利者,最後單獨輸出螢幕

delete p;//輸出最後再刪除這一結點,釋放記憶體

pre=first=rear=p = null;//避免野指標出現使其指向空

}下面是maiwww.cppcns.comn函式,命名為「約瑟夫環_main.cpp」

#include//引入輸入輸出流

#include"約瑟夫環.h"//引入標頭檔案

using namespace std;

//主函式區域

int main()

下面是執行截圖:

本文標題: c++實現約瑟夫環的迴圈單鏈表

本文位址:

採用迴圈單鏈表實現約瑟夫環

演算法的基本思想 利用鍊錶和陣列,約瑟夫環問題中的資料時人所在的位置,而這個資料時存在 第一元素 最後元素 並且 存在唯一的前驅和後繼,符合線性表的特點,由於需要模擬約瑟夫環的出列問題,可以採用順序表來實現 線性表,完成出列順序的輸出,核心演算法主要分兩步 1 確定需要刪除的位置 2 設定並刪除該位...

約瑟夫環(約瑟夫問題) 採用迴圈單鏈表實現

yuesefuwenti.cpp 定義控制台應用程式的入口點。約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部...

單鏈表實現約瑟夫環

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