版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《數(shù)據(jù)結構》課程設計檔案</p><p> 題 目: 約瑟夫環(huán)問題 </p><p> 學 院: 信息學院 </p><p> 專 業(yè): 網(wǎng)絡工程 </p><p> 姓 名:
2、 </p><p> 學 號: </p><p> 班 級 </p><p> 指導教師: </p><p> 職 稱: 講 師
3、 </p><p> 完成日期: 2012年12月 </p><p><b> 摘 要</b></p><p> 約瑟夫環(huán)問題是由古羅馬著名的史學家Josephus提出的問題演變而來,所以通常稱為Josephus問題。改進約瑟夫環(huán)問題的描述是:編號為1,2,…,n的n個人按順時針方向圍坐一圈,
4、每人有一個密碼K(整數(shù)),留作其出圈后應報到K后出圈。報數(shù)方法采用順時針報數(shù)和逆時針報數(shù)交替進行,初始密碼可任意確定。求最后剩下的人的編號。這個就是約瑟夫環(huán)問題的實際場景。約瑟夫環(huán)問題如果采用單循環(huán)鏈表則能很好的解決。循環(huán)鏈表的數(shù)據(jù)結構,就是將一個鏈表的尾元素指針指向隊首元素。 p->link=head解決問題的核心步驟是:先建立一個具有n個鏈結點,無頭結點的循環(huán)鏈表,然后確定第一個報數(shù)人的位置,并不斷地從鏈表中刪除鏈結點,直到鏈
5、表為空。</p><p> 【關鍵詞】約瑟夫環(huán);單循環(huán)鏈表;數(shù)據(jù)結構;刪除結點</p><p><b> Abstract</b></p><p> Josephus ring problem is evolved by the question that raised by Josephus,the famous historican
6、of ancient Rome.SO it always be called Josephus Problem.The description of improving Josephus problem is :people was numbered 1,2,3,...,n sitted as a clockwise direction around circle,each with a password of K(integer),r
7、eserved for the ring should be reported K out of the ring .The report adapted the method that changed alternately with the clockwise and anticlockwise, the initial password can be deter</p><p> [Keywords] J
8、oseph ring; circular linked list; data structure; deleting node</p><p><b> 目 錄</b></p><p><b> 前言1</b></p><p> 第一章 問題分析2</p><p> 第二章 邏輯
9、設計4</p><p> 2.1 循環(huán)鏈表抽象數(shù)據(jù)類型定義4</p><p> 2.2本程序包含的模塊設計4</p><p> 第三章 詳細設計6</p><p><b> 3.1 主函數(shù)6</b></p><p> 3.2 鏈表的創(chuàng)建7</p><p&
10、gt; 3.3 出隊處理9</p><p> 3.4 約瑟夫環(huán)說明模塊10</p><p> 3.5菜單模塊10</p><p> 第四章 程序調試與測試11</p><p><b> 第五章 結論14</b></p><p><b> 參考文獻15</b&
11、gt;</p><p><b> 致謝16</b></p><p><b> 附錄17</b></p><p><b> 前 言</b></p><p> 數(shù)據(jù)結構是一門研究非數(shù)值計算的程序設計問題中計算機的操作對象以及它們之間的關系和操作的學科。該課程設計的目
12、的是通過課程設計的綜合訓練,以培養(yǎng)分析和編程等實際動手能力,是系統(tǒng)掌握數(shù)據(jù)結構這門課程的主要內容。</p><p> 本次課程設計的內容是用單循環(huán)鏈表模擬約瑟夫環(huán)問題,循環(huán)鏈表是一種首尾相接的鏈表,其特點是無須增加存儲容量,僅對表的鏈接方式稍作改變,使表處理更加靈活。約瑟夫環(huán)問題就是用單循環(huán)鏈表處理的一個實際應用。通過這個設計實例,了解單鏈表和單循環(huán)鏈表的相同與不同之處,進一步加深對鏈表結構類型及鏈表操作的理解
13、。</p><p> 通過該課程設計,能運用所學知識,上機解決一些實際問題,了解并初步掌握設計,實現(xiàn)較大程序的完整過程,包括系統(tǒng)分析、編碼設計、系統(tǒng)集成、以及調試分析,熟練掌握數(shù)據(jù)結構的選擇、設計、實現(xiàn)以及操作方法,為進一步的應用開發(fā)打好基礎。</p><p><b> 第一章 問題分析</b></p><p> 約瑟夫環(huán)問題描述的是:設
14、編號為1,2,…,n的n(n>0)個人按順時針方向圍坐一圈,每個人持有一個正整數(shù)密碼。開始時選擇一個正整數(shù)作為報數(shù)上限m,從第一個人開始順時針方向自1起按順序報數(shù),報到m時停止報數(shù),報m的人出圈,將他的密碼作為新的m值,從他的順時針方向上的下一個人起重新從1報數(shù)。如此下去,直到所有人都出圈為止。令n最大值為100。要求設計一個程序模擬此過程,求出出圈的編號序列。具體描述如圖1和圖2所示:</p><p>
15、 圖1 約瑟夫環(huán)問題圖解</p><p> 圖2 約瑟夫環(huán)原理演示圖</p><p><b> 第二章 邏輯設計</b></p><p> 2.1 循環(huán)鏈表抽象數(shù)據(jù)類型定義</p><p> typedef struct LNode//定義單循環(huán)鏈表中結點的結構 </p><p><
16、;b> {</b></p><p> int num;//編號 </p><p> int pwd;//password</p><p> struct LNode *next;//指向下一結點的指針</p><p><b> }LNode;</b></p><p>
17、 2.2本程序包含的模塊設計</p><p><b> ?。?)構造結點模塊</b></p><p> LNode *createNode(int m_num,int m_pwd)</p><p><b> {</b></p><p><b> LNode *p;</b>
18、</p><p> p=(LNode *)malloc(sizeof(LNode));//生成一個結點 </p><p> p->num=m_num;//把實參賦給相應的數(shù)據(jù)域</p><p> p->pwd=m_pwd;</p><p> p->next=NULL;//指針域為空</p><p&
19、gt; return p; </p><p><b> }</b></p><p><b> (2)創(chuàng)建鏈表模塊</b></p><p> void createList(LNode *ppHead,int n)</p><p><b> ?。?)出隊處理模塊</b>&
20、lt;/p><p> void jose(LNode *ppHead,int m_pwd)</p><p> ?。?)約瑟夫環(huán)說明輸出模塊</p><p> void instruction()</p><p><b> ?。?)菜單模塊</b></p><p> void menu()<
21、/p><p><b> ?。?)主函數(shù)模塊</b></p><p> int main()</p><p> 函數(shù)的調用關系圖如圖3所示:</p><p> 圖3 約瑟夫環(huán)函數(shù)調用關系圖</p><p><b> 第三章 詳細設計</b></p><
22、p><b> 3.1 主函數(shù)</b></p><p> 圖4 主函數(shù)數(shù)據(jù)流程圖</p><p> 根據(jù)圖4,主函數(shù)程序如下:</p><p> int main()</p><p><b> { </b></p><p> int n,m,x;</p
23、><p> LNode *ppHead=NULL;</p><p><b> menu();</b></p><p><b> for(;;)</b></p><p><b> { </b></p><p> printf("\n請選擇
24、要執(zhí)行的操作:");</p><p> scanf("%d",&x);</p><p> system("cls");</p><p><b> switch(x)</b></p><p><b> {</b></p>
25、<p> case 1: </p><p> printf("**********************************************\n");</p><p> printf("約瑟夫環(huán):\n"); </p><p>
26、 printf(" 編號為1,2,3,4…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數(shù)).一開始任選一個正整數(shù)作為報數(shù)的上限值m,從第一個人開始按順時針方向自1開始按順序報數(shù),報到m時停止.報m的人出列,將他的密碼m作為新的m值,從他的順時針方向上的下一人開始重新從1報數(shù),如此下去,直到所有人全部出列為止.編程打印出列順序.\n");</p><p> printf(&qu
27、ot;**********************************************\n"); </p><p><b> main();</b></p><p><b> break;</b></p><p><b> case 2:</b></p>&l
28、t;p> printf("請輸入總人數(shù)n:\n");</p><p> scanf("%d",&n);</p><p> printf("請輸入開始上限數(shù)m:");</p><p> scanf("%d",&m);</p><p>
29、 createList(&ppHead,n); </p><p> printf("\n");</p><p> printf("出隊順序:\n");</p><p> jose(ppHead,m);</p><p> printf("\n約瑟夫環(huán)游戲結束!\n");
30、</p><p><b> main();</b></p><p><b> break;</b></p><p><b> case 0:</b></p><p><b> exit(0);</b></p><p><
31、;b> default:</b></p><p> system("cls");</p><p> printf("\n您選擇的操作有誤,請重新選擇...\n ");</p><p><b> main();</b></p><p><b>
32、 }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 3.2 鏈表的創(chuàng)建</b></p><p>
33、; 圖5 創(chuàng)建鏈表函數(shù)的數(shù)據(jù)流程圖</p><p> /*創(chuàng)建單向循環(huán)鏈表ppHead,參加人數(shù)個數(shù)為n,并輸入每人的密碼值,若建立失敗則生成頭結點,讓cur指向他,若建立成功則插入結點P,cur指向的數(shù)據(jù)元素為p,后續(xù)為"空"的結點,再把P插入循環(huán)鏈表ppHead中*/</p><p> 根據(jù)圖5,創(chuàng)建鏈表函數(shù)程序如下:</p><p>
34、 void createList(LNode **ppHead,int n)</p><p><b> {</b></p><p> int i,m_pwd;</p><p> LNode *p,*cur;//cur:浮標指針</p><p> for(i=1;i<=n;i++)</p>&
35、lt;p><b> { </b></p><p> printf("輸入第%d個人的密碼:",i);</p><p> scanf("%d",&m_pwd);//輸入持有密碼 </p><p> p=createNode(i,m_pwd);//調用構造結點函數(shù)</p>
36、<p> if(*ppHead==NULL)//如果頭結點為空 </p><p> { *ppHead=cur=p;//生成頭結點,讓cur指向他 </p><p> cur->next=*ppHead;//cur的指針域指向自身 </p><p><b> }</b></p><p> e
37、lse//如果不為空,則插入結點 </p><p> { p->next = cur->next;</p><p> cur->next = p;</p><p> cur= p;//cur指向新插入結點</p><p><b> } </b></p><p><
38、;b> } </b></p><p> printf("完成創(chuàng)建!\n"); //提示鏈表創(chuàng)建完成 </p><p><b> }</b></p><p><b> 3.3 出隊處理</b></p><p> 圖6 出對函數(shù)的數(shù)據(jù)流程圖</p&g
39、t;<p> /*p指向要刪除結點的前一個結點,ppHead指向要刪除的結點,使p=ppHead,ppHead再指向要刪除結點的下一個結點,使p和ppHead鏈接,輸出p指向結點的編號和密碼值,釋放ppHead,如此循環(huán),直至把所有結點都打印和刪除為止!*/</p><p> 根據(jù)圖6,出隊函數(shù)程序如下:</p><p> void jose(LNode *ppHead
40、,int m_pwd)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> LNode *p;//定義指針變量</p><p> for(i=1;p!=ppHead;i++)</p><p><b>
41、 { </b></p><p> for(j=1;j<m_pwd;++j) </p><p><b> {</b></p><p> p=ppHead;//p賦值為ppHead,p指向要刪除結點的前一個結點</p><p> ppHead=ppHead->next;//ppHead指向下
42、一個元素</p><p><b> }</b></p><p> p->next = ppHead->next;//p結點與頭結點鏈接</p><p> i=ppHead->pwd;//i賦值為ppHead->pwd</p><p> j=ppHead->num;//j賦值為ppHe
43、ad->num,j為要刪除的密碼值</p><p> printf("第%d個人出列,密碼:%d\n",j,i); </p><p> m_pwd=ppHead->pwd;//m_pwd賦值為ppHead->pwd</p><p> free(ppHead);//釋放頭結點</p><p> pp
44、Head=p->next;//ppHead重新賦值給p->next,即釋放前的ppHead->pwd指針//刪除報數(shù)結點 </p><p><b> }</b></p><p> i=ppHead->pwd;//i賦值為ppHead->pwd</p><p> j=ppHead->num;//j賦值為p
45、pHead->num</p><p> printf("最后一個出列是%d號,密碼是:%d\n",j,i); </p><p> free(ppHead);//釋放頭結點</p><p><b> }</b></p><p> 3.4 約瑟夫環(huán)說明模塊</p><p&
46、gt; void instruction()</p><p><b> { </b></p><p> printf("**********************************************\n"); </p><p> printf("約瑟夫環(huán):\n"); </p
47、><p> printf(" 編號為1,2,3,4…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數(shù)).一開始任選一個正整數(shù)作為報數(shù)的上限值m,從第一個人開始按順時針方向自1開始按順序報數(shù),報到m時停止.報m的人出列,將他的密碼m作為新的m值,從他的順時針方向上的下一人開始重新從1報數(shù),如此下去,直到所有人全部出列為止.編程打印出列順序.\n"); </p><
48、;p> printf("**********************************************\n"); </p><p><b> }</b></p><p><b> 3.5菜單模塊</b></p><p> void menu()</p><
49、p><b> {</b></p><p> printf("*****************約瑟夫環(huán)***********************\n");</p><p> printf("\n");
50、 </p><p> printf(" [1]約瑟夫環(huán)問題的闡述 \n"); </p><p> printf(" [2]按要求求解約瑟夫環(huán) \n");
51、</p><p> printf(" [0]退出 \n"); </p><p> printf("**************** 歡迎使用!*********************\n");</p><p
52、><b> }</b></p><p> 第四章 程序調試與測試</p><p> 1. 調用模塊時,結點結構的調用與其他模塊產(chǎn)生沖突,導致每一行都出現(xiàn)兩個錯誤,加入子函數(shù)的聲明后,錯誤消失。</p><p> 2. 剛開始時忽略了一些變量參數(shù)的標識,如:"&"和“*”,使調試程序時費時不少。今后應重視
53、確定參數(shù)的變量和賦值屬性的區(qū)分和標識。</p><p> 3. 本次課程設計采用數(shù)據(jù)抽象的程序設計方法,將程序劃分為三個結構:元素結點、單向循環(huán)鏈表,主控制模塊。思路較為清晰,實現(xiàn)調用順利。 經(jīng)過本次實驗,使我對數(shù)據(jù)結構這門課程有了進一步的了解,每一個程序經(jīng)過問題分析、概要設計、詳細設計之后,思路清晰呈現(xiàn),程序也很快就出來了,最后經(jīng)過調試、運行,又有了新的體驗。</p><p><
54、b> <測試用例></b></p><p> 這是一個使用循環(huán)鏈表的經(jīng)典問題。本程序開始運行界面如圖7所示:</p><p> 圖7 約瑟夫環(huán)開始運行界面</p><p> 選擇1進入約瑟夫環(huán)問題闡述,如圖8所示:</p><p> 圖8 約瑟夫環(huán)問題闡述</p><p>
55、①選擇2,輸入下列數(shù)據(jù)測試,測試結果如圖9所示:</p><p><b> 請輸入總人數(shù)n:8</b></p><p> 請輸入開始上限數(shù)m:9</p><p> 請依次輸入每個人的密碼:9 3 7 9 12 6 11 10 13</p><p> 出隊順序:1 4 3 8 2 5 7 6 </p>
56、<p> 圖9 約瑟夫環(huán)測試1</p><p> ?、谶x擇2,輸入下列數(shù)據(jù)測試,測試結果如圖10所示:</p><p><b> 請輸入總人數(shù)n:6</b></p><p> 請輸入開始上限數(shù)m:16</p><p> 請依次輸入每個人的密碼:32 5 6 9 8 7 </p><
57、p> 出隊順序:4 2 3 1 6 5</p><p> 圖10 約瑟夫環(huán)測試2</p><p> ③繼續(xù)選擇2,輸入下列數(shù)據(jù)測試,測試結果如圖11所示:</p><p><b> 請輸入總人數(shù)n:7</b></p><p> 請輸入開始上限數(shù)m:20</p><p> 請依次輸
58、入每個人的密碼:2 4 6 3 8 4 0 </p><p> 出隊順序:6 3 4 1 5 2 7</p><p> 圖11 約瑟夫環(huán)測試3</p><p><b> 第五章 結論</b></p><p> 我這次數(shù)據(jù)結構課程設計的題目是:約瑟夫環(huán)問題。通過對該題目的設計,我加深了對數(shù)據(jù)結構及存儲結構的理解,進
59、一步地理解和掌握了課本中所學的各種數(shù)據(jù)結構,尤其是對單循環(huán)鏈表的基本運算的實現(xiàn),學會了如何把學到的知識用于解決實際問題,鍛煉了自己動手的能力。</p><p> 通過這次數(shù)據(jù)結構課程設計,我感受最深的就是對于循環(huán)鏈表的使用,可以說對循環(huán)鏈表有了比以前更進一步的認識,以前只是一知半解的,如果只給個題目,自己根本不能把程序完整地編寫出來,所以這次課程設計最大的收獲就在于對循環(huán)鏈表有了一定的理解,包括其中的一系列操作
60、,如建立一個循環(huán)鏈表,刪除鏈表中的一個結點,增加一個結點等。</p><p> 兩周的課程設計很短暫,但其間的內容是很充實的,在其中我學習到了很多平時書本中無法學到的東西,積累了經(jīng)驗,鍛煉了自己分析問題,解決問題的能力??偠灾@兩周中我學到很多,受益匪淺。</p><p><b> 參考文獻</b></p><p> [1] 嚴蔚敏,吳
61、偉民 著.數(shù)據(jù)結構(C語言版)[M].北京:清華大學出版社,1997.</p><p> [2] 嚴蔚敏,吳偉民 著.數(shù)據(jù)結構題集(C語言版)[M].北京:清華大學出版社,1997.</p><p> [3] William Ford,William Topp 著. DATA STRUCTURE WITH C++ [M].北京:清華大學出版社,1996 .</p><
62、;p> [4] 譚浩強 著. C語言程序設計[M].北京: 清華大學出版社,2000.</p><p> [5] 周云靜 著.數(shù)據(jù)結構習題解析與上機指導[M].北京:冶金工業(yè)出版社,2004.</p><p> [6] 陳慧南 著.數(shù)據(jù)結構—C++語言描述[M].北京:人民郵電出版社,2005.</p><p> [7] Adam Drozdek 著.
63、數(shù)據(jù)結構與算法[M].北京:清華大學出版社,2006.</p><p> [8] 徐孝凱 著.數(shù)據(jù)結構實驗[M].北京:中央廣播電視大學出版社,2001.</p><p><b> 致 謝</b></p><p> 這次的課程設計,我們四人一小組完成自己所選的課題,但是還是得到了來自很多方面的幫助。在此首先要感謝學院提供給我這次實踐
64、的機會,讓我們有機會貼近現(xiàn)實,感受成功的喜悅;其次要感謝實驗機房的老師提供優(yōu)良的實驗設備供我們做課程設計,正是這種良好的課程設計的環(huán)境讓我們整個課程設計過程心情都非常愉快。再次要感謝指導老師的辛勤指導,每當我們遇到疑難問題時,是他一次次不厭其煩地解釋和悉心地指導,我們才能闖過一個個難關,到達勝利的彼岸,是他給我們提供了一次寶貴的檢驗自己的機會。最后也要感謝同伴們的幫助,有了他們的支持使我遇到任何困難都覺得不是一個人在戰(zhàn)斗。感謝所有在課程
65、設計過程中幫助過我的人!</p><p><b> 附 錄</b></p><p><b> 源代碼:</b></p><p> #include <stdio.h>//輸入輸出函數(shù)頭文件</p><p> #include <stdlib.h>//字符串轉短整
66、形函數(shù)的頭文件</p><p> typedef struct LNode//定義單循環(huán)鏈表中結點的結構 </p><p> { int num;//編號 </p><p> int pwd;//password</p><p> struct LNode *next;//指向下一結點的指針</p><p>
67、<b> }LNode;</b></p><p><b> /*構造結點*/</b></p><p> LNode *createNode(int m_num,int m_pwd)</p><p> { LNode *p;</p><p> p=(LNode *)malloc(sizeo
68、f(LNode));//生成一個結點 </p><p> p->num=m_num;//把實參賦給相應的數(shù)據(jù)域</p><p> p->pwd=m_pwd;</p><p> p->next=NULL;//指針域為空</p><p> return p; </p><p><b>
69、 } </b></p><p> /*創(chuàng)建循環(huán)鏈表*/</p><p> void createList(LNode **ppHead,int n)</p><p> {/*創(chuàng)建單向循環(huán)鏈表ppHead,人數(shù)個數(shù)為n,并輸入每個人的密碼值,若建立失敗則生成頭結點,讓cur指向他,若建立成功則插入結點P,cur指</p><p&g
70、t; 向的數(shù)據(jù)元素為p,后續(xù)為"空"的結點,再把P插入循環(huán)鏈表ppHead中*/</p><p> int i,m_pwd;</p><p> LNode *p,*cur;//cur:浮標指針</p><p> for(i=1;i<=n;i++)</p><p> { printf("輸入第%d
71、個人的密碼:",i);</p><p> scanf("%d",&m_pwd);//輸入持有密碼 </p><p> p=createNode(i,m_pwd);//調用構造結點函數(shù)</p><p> if(*ppHead==NULL)//如果頭結點為空 </p><p> { *ppHead=
72、cur=p;//生成頭結點,讓cur指向他 </p><p> cur->next=*ppHead;//cur的指針域指向自身 </p><p><b> }</b></p><p> else//如果不為空,則插入結點 </p><p> { p->next = cur->next;<
73、/p><p> cur->next = p;</p><p> cur= p;//cur指向新插入結點</p><p><b> } </b></p><p><b> } </b></p><p> printf("完成創(chuàng)建!\n"); /
74、/提示鏈表創(chuàng)建完成 </p><p><b> } </b></p><p><b> /*出隊處理*/</b></p><p> void jose(LNode *ppHead,int m_pwd)</p><p> {/*p指向要刪除結點的前一個結點,ppHead指向要刪除的結點,使p=
75、ppHead,ppHead再指向要刪除結點的下一個結點,使p和ppHead鏈接,輸出p指向結點的編號和密碼值,釋放ppHead,如此循環(huán),直至把所有結點都打印和刪除為止!*/</p><p><b> int i,j;</b></p><p> LNode *p;//定義指針變量</p><p> for(i=1;p!=ppHead;i+
76、+)</p><p> { for(j=1;j<m_pwd;++j)</p><p> { p=ppHead;//p賦值為ppHead,p指向要刪除結點的前一個結點</p><p> ppHead=ppHead->next;//ppHead指向下一個元素</p><p><b> } </b>&l
77、t;/p><p> p->next = ppHead->next;//p結點與頭結點鏈接</p><p> i=ppHead->pwd;//i賦值為ppHead->pwd</p><p> j=ppHead->num;//j賦值為ppHead->num,j為要刪除的密碼值</p><p> printf
78、("第%d個人出列,密碼:%d\n",j,i); </p><p> m_pwd=ppHead->pwd;//m_pwd賦值為ppHead->pwd</p><p> free(ppHead);//釋放頭結點</p><p> ppHead=p->next;//ppHead重新賦值給p->next,即釋放前的ppHe
79、ad->pwd指針//刪除報數(shù)結點 </p><p><b> }</b></p><p> i=ppHead->pwd;//i賦值為ppHead->pwd</p><p> j=ppHead->num;//j賦值為ppHead->num</p><p> printf("
80、最后一個出列是%d號,密碼是:%d\n",j,i); </p><p> free(ppHead);//釋放頭結點</p><p><b> }</b></p><p> void instruction()</p><p> { printf("*********************
81、**************************\n"); </p><p> printf("約瑟夫環(huán):\n"); </p><p> printf(" 編號為1,2,3,4…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數(shù)).一開始任選一個正整數(shù)作為報數(shù)的上限值m,從第一個人開始按順時針方向自1開始順序報數(shù),報到時停止.報
82、m的人出列,將他的密碼m作為新的m值,從他在順時針方向上的下一人開始重新從1報數(shù),如此下去, 直到所有人全部出列為止.編程打印出列順序.\n"); </p><p> printf("***********************************************\n"); </p><p><b>
83、 }</b></p><p> void menu()</p><p> { printf("****************約瑟夫環(huán)*************************\n");</p><p> printf("\n");</p><p> printf(
84、" [1]約瑟夫環(huán)問題的闡述 \n");</p><p> printf(" [2]按要求求解約瑟夫環(huán) \n");</p><p> printf(" [0]退出
85、 \n");</p><p> printf("****************歡迎使用!**********************\n");</p><p><b> } </b></p><p><b> /*主函數(shù)模塊*/</b></p><p>
86、 int main()</p><p> { int n,m,x;</p><p> LNode *ppHead=NULL;</p><p><b> menu();</b></p><p><b> for(;;)</b></p><p> { print
87、f("\n請選擇要執(zhí)行的操作:");</p><p> scanf("%d",&x);</p><p> system("cls");</p><p><b> switch(x)</b></p><p> { case 1:</p>
88、;<p> printf("*****************************************\n"); </p><p> printf("約瑟夫環(huán):\n"); </p><p> printf(" 編號為1,2,3,4…,n的n個人按順時針方向圍坐一圈,每人持有一個密碼(正整數(shù)).一開始任選一個
89、正整數(shù)作為報數(shù)的上限值m,從第一個人開始按順時針方向自1開始順序報數(shù),報到m時停止.報m的人出列,將他的密碼m作為新的m值,從他在順時針方向上的下一人開始重新從1報數(shù),如此下去, 直到所有人全部出列為止.編程打印出列順序.\n");
90、</p><p> printf("****************************************\n"); </p><p><b> main(); </b></p><p><b> break;</
91、b></p><p><b> case 2:</b></p><p> printf("\n請輸入總人數(shù)n:");</p><p> scanf("%d",&n);</p><p> printf("請輸入開始上限數(shù)m:");</p
92、><p> scanf("%d",&m);</p><p> createList(&ppHead,n); </p><p> printf("\n");</p><p> printf("出隊順序:\n");</p><p> jose
93、(ppHead,m);</p><p> printf("\n約瑟夫環(huán)游戲結束!\n");</p><p><b> main();</b></p><p><b> break;</b></p><p><b> case 0:</b></p
94、><p><b> exit(0);</b></p><p><b> default:</b></p><p> system("cls");</p><p> printf("\n您選擇的操作有誤,請重新選擇...\n\n\n");</p>
95、<p><b> main();</b></p><p><b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> } </b&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計--約瑟夫環(huán)問題
- 數(shù)據(jù)結構_約瑟夫環(huán)_課程設計
- 數(shù)據(jù)結構課程設計---約瑟夫(joseph)環(huán)問題
- 數(shù)據(jù)結構課程設計約瑟夫(joseph)環(huán)問題
- 《數(shù)據(jù)結構》課程設計“約瑟夫環(huán)”
- 約瑟夫環(huán)課程設計----數(shù)據(jù)結構
- 數(shù)據(jù)結構課程設計--- 約瑟夫(joseph)環(huán)
- 數(shù)據(jù)結構約瑟夫環(huán)模擬課程設計
- 數(shù)據(jù)結構課程設計報告(約瑟夫環(huán))
- 數(shù)據(jù)結構--約瑟夫環(huán)課程設計報告
- 數(shù)據(jù)結構課程設計報告---約瑟夫環(huán)
- 數(shù)據(jù)結構課程設計報告--約瑟夫環(huán)
- 數(shù)據(jù)結構約瑟夫環(huán)的課程設計報告
- 數(shù)據(jù)結構約瑟夫環(huán)問題
- 數(shù)據(jù)結構約瑟夫環(huán)問題
- 數(shù)據(jù)結構課程設計報告約瑟夫環(huán)完整版[1]
- 約瑟夫環(huán)問題課程設計
- 數(shù)據(jù)結構課程設計---joseph環(huán)
- 數(shù)據(jù)結構課程設計報告---joseph環(huán)
- 數(shù)據(jù)結構課程設計--數(shù)據(jù)結構課程設計----huffman編碼
評論
0/150
提交評論