約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知 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人該人就必須自殺,然後再...