迴圈鍊錶的應用,並且應為不帶頭節點的迴圈鍊錶,首先建立乙個迴圈鍊錶,在函式johephus中進行操作,主要就是用for找到要刪除的元素(注意p==1單獨考慮,for中p至少為2),刪除元素並輸出直至鍊錶為空。
for(j=1;j<=p-1;j++)把尋找報數的位置和尋找要刪除的節點的前驅結合在乙個迴圈中,減少時間複雜度,因為第一次寫我是在主函式中用r指向找到的要刪除的節點,然後傳入delete(&l,r)中刪除,而在delete中,需要從頭找r的前驅,再修改指標,會發現這其中兩個尋找的過程是重複進行的,所以基於函式功能的思想將它結合在一起,放入johephus中,
第一次寫加入了initlist,但由於沒有頭節點,只是將頭指標賦為空指標,並沒有意義,而呼叫函式會使時間增長,可以將這一步放入到creat函式中,判空函式也完全可以有while(cur.next!=cur)來表示,當然這個函式判斷是否只剩乙個元素了,也完全不用重新寫delete,
#include
#include
#define error -1
typedef struct lnodelnode,* link;
void creat_list(link *l,int n)}}
void johephus(link *l,int n,int p)
printf("%d",(*cur).num);
}else//p>=2
printf("%d ",(*cur).num);
(*r).next=(*cur).next;
free(cur);
cur=(*r).next;
}//while
printf("%d",(*cur).num);
}//else
}//johephus
int main()
//if
}//if
return 0;
}
九度OJ 題目1189 還是約瑟夫環
題目1189 還是約瑟夫環 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 341 解決 204 題目描述 生成乙個長度為21的陣列,依次存入1到21 建立乙個長度為21的單向鍊錶,將上述陣列中的數字依次存入鍊錶每個結點中 將上述鍊錶變為單向封閉 迴圈 鍊錶 從頭結點開始數,將第17個結...
OJ 約瑟夫環問題(迴圈鍊錶解法)
有n人圍成一圈,順序排號。從第1個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。輸入初始人數n 輸出最後一人的初始編號 樣例輸入 3樣例輸出 2故事背景 據說著名猶太歷史學家 josephus 有過以下的故事 在羅馬人占領喬塔帕特後,39個猶太人與josephus...
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...