這是我們資料結構課的乙個上機作業。
這些原始碼絕對準確,用的c++標準寫法。雖然沒有用stl給出的標準函式庫,而是使用的鍊錶來實現的,其實指標的使用是資料結構中重要的一環。
這個特定條件的約瑟夫環,是這樣描述的:
一.問題描述
設編號為1、2、……n的n個人按順時針方向圍坐一圈,約定編號為k(1<=k<=n)的人按順時針方向從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。試設計演算法求出n個人的出列順序。
二.基本要求
程式執行時,首先要求使用者指定人數n、第乙個開始報數的人的編號k及報數上限值m。然後,按照出列的順序列印出相應的編號序列。
這個問題和一般的約瑟夫有所不同,不過其實本質都差不多。
這不過是加了一步操作。
下面是c++原始碼:
#include
<
iostream
>
using
namespace
std;
//鍊錶結點類number為這個人的編號
struct
person ;//
約瑟夫環類,此類包含多個person類,並控制輸入輸出.
class
joseph_ring
//建構函式,把成員變數賦初值
void
create();
//建立環的成員函式
void
show();
//運算並輸出的成員函式
};void
joseph_ring::create() //
否則,p2永遠指向尾結點,新建的結點都接到p2之後
else }
p2->
next
=head;
//把鍊錶連成乙個迴圈鍊錶(就是乙個環)
} void
joseph_ring::show() p1=
head;
//有n個人,所以執行n次迴圈
for(
inti=1
;i<=
n;i++)
cout
<<
p1->
number
<
";//輸出當前人的編號 p=
p1;//
p指向當前這個人
p2->
next=p1
->
next;
//把當前的人前的人和當前的人後的人連上. p1=
p1->
next;
//下次從當前的人的下乙個人開始數
delete p;
//把這個人刪除(就是釋放這塊記憶體)
} //
cout<
//cin>>m;
//這行是為了避免程式迅速關閉,看不到結果.
} int
main()
這個程式可以順利的編譯執行,如果用vc不能編譯可能是版本問題。
施楊出品
用c 編寫的檔案分割器原始碼!
只適用於txt,vbe,c,cpp等檔案 include include include include using namespace std void fengeming void void wenjiangeshu void void fengewenjian void char srwenj...
原始碼和文件分享 基於C 的約瑟夫生者死者遊戲
一 使用說明 1.1 專案簡介 約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得同意這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從...
原始碼和文件分享 基於C 的約瑟夫生者死者遊戲
一 使用說明 1.1 專案簡介 約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得同意這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從...