約瑟夫環問題 鍊錶 刪頭添尾法

2021-10-09 14:49:17 字數 914 閱讀 7161

有15個人圍成一圈,順序從1到15編號。從第乙個人開始報數,凡報到n的人退出圈子。用c語言寫出程式,輸入n(n>1)的值,輸出最後留在圈子裡的人的編號。

void  main( )

構建鍊錶 l

把1-15這15個數逐個插入到 l 的尾部

輸入nwhile(鍊錶 l 中元素多於乙個)

for(i=1;i取 l第乙個元素 放到l的尾部;

刪除l第乙個元素

輸出l第乙個元素

刪除 l第乙個元素

輸出l第乙個元素,就是剩餘的那乙個

#include#includeusing namespace std;

void print(list&l)

list::iterator it;

for(it=l.begin();it!=l.end();it++)

coutint i,n;

for(i=1;i<16;i++)

//cin>>n;

n=3;

while(l.size()>1)

list::iterator it;

for(it=l.begin();it!=l.end();it++)

coutint i,n;

for(i=1;i<16;i++)

//cin>>n;

n=3;

while(l.size()>1)

{ int x;

if(n%l.size()==0)

x=l.size();

else

x=n%l.size();

for(i=1;i還可以優化:即,把前n-1個資料構成的鍊錶整體摘下來,插入到表尾。

這時候,用list模板就不行了,其成員函式沒有現成的。

這也是我們為什麼要學習基本原理的原因,沒有的時候,你有能力創造。

雙端鍊錶的頭插尾插頭刪尾刪

雙端鍊錶的定義我在這裡就不贅述了。直接上圖講 雙端鍊錶的插入,無論是頭插還是尾插,都要記住大話資料結構中的一張圖,強調順序的。這裡的順序比較容易記住,就是自己寫 的時候可能會比較迷糊,我是這樣記得,箭頭從起點到終點的方向為等式的左邊,箭頭的終點為等式的右邊,拿 舉例子,箭頭的方向為node prev...

約瑟夫環(鍊錶法,公式法)

約瑟夫環作為乙個數學問題,它的 實現方式有很多,比如迴圈鍊錶,公式解決或者動態規劃,之前參考資料也有用遞迴解決的。anyway,這些都是解決約瑟夫環問題很有效的方法。這裡總結兩種方法,迴圈鍊錶法和公式法。首先是迴圈鍊錶法,它的原理很簡單,也很容易理解。求解過程和人思考解決的過程很接近。設總人數為n,...

鍊錶操作 頭插法尾插法

單鏈表的插入操作,包括頭插和尾插,兩種的時間複雜度都為o n 單鏈表插入操作 頭插 尾插 include include using namespace std 定義結點資料型別 typedef int elemtype 結點定義 typedef struct lnode lnode,linklis...