數(shù)據(jù)結(jié)構(gòu)_約瑟夫環(huán)_課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)報(bào)告</p><p>  設(shè)計(jì)題目: </p><p>  班 級(jí): </p><p>  組 長: 姓名(學(xué)號(hào)) </p><p>  組 員:姓名(學(xué)號(hào))… </p>

2、;<p>  指導(dǎo)教師: </p><p>  完成日期: </p><p><b>  成績:</b></p><p><b>  目 錄</b></p><p><b>  1需求分析3

3、</b></p><p><b>  1.1功能分析3</b></p><p><b>  1.2設(shè)計(jì)平臺(tái)3</b></p><p><b>  2概要設(shè)計(jì)3</b></p><p>  2.1類LinkList3</p><p> 

4、 2.2類Joseph4</p><p>  2.3類異常處理4</p><p>  3詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)4</p><p>  3.1創(chuàng)建結(jié)點(diǎn)Node4</p><p>  3.2創(chuàng)建雙向循環(huán)鏈表5</p><p>  3.3從鏈表中刪除結(jié)點(diǎn)6</p><p>  4調(diào)試與操作說明1

5、0</p><p>  4.1調(diào)試情況10</p><p>  4.2操作說明10</p><p><b>  5設(shè)計(jì)總結(jié)11</b></p><p>  參 考 文 獻(xiàn)12</p><p><b>  附錄12</b></p><p>&l

6、t;b>  1需求分析</b></p><p><b>  1.1功能分析</b></p><p>  本次選做的課程設(shè)計(jì)是改進(jìn)約瑟夫(Joseph)環(huán)問題。約瑟夫環(huán)問題是一個(gè)古老的數(shù)學(xué)問題,本次課題要求用程序語言的方式解決數(shù)學(xué)問題。此問題僅使用單循環(huán)鏈表就可以解決此問題。而改進(jìn)的約瑟夫問題通過運(yùn)用雙向循環(huán)鏈表,同樣也能方便地解決。</p>

7、;<p>  在建立雙向循環(huán)鏈表時(shí),因?yàn)榧s瑟夫環(huán)的大小由輸入決定。為方便操作,我們將每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域的值定為生成結(jié)點(diǎn)時(shí)的順序號(hào)和每個(gè)人持有的密碼。進(jìn)行操作時(shí),用一個(gè)指針current指向當(dāng)前的結(jié)點(diǎn),指針front始終指向頭結(jié)點(diǎn)。然后建立雙向循環(huán)鏈表,因?yàn)槊總€(gè)人的密碼是通過rand()函數(shù)隨機(jī)生成的,所以指定第一個(gè)人的順序號(hào),找到結(jié)點(diǎn),不斷地從鏈表中刪除鏈結(jié)點(diǎn),直到鏈表剩下最后一個(gè)結(jié)點(diǎn),通過一系列的循環(huán)就可以解決改進(jìn)約瑟夫環(huán)

8、問題。</p><p>  1、本演示程序中,利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)模擬約瑟夫問題的進(jìn)行。程序運(yùn)行后,首先要求用戶指定初始報(bào)數(shù)上限值,然后讀取個(gè)人的密碼??稍O(shè)n≤30。此題所用的循環(huán)鏈表中不需要“頭結(jié)點(diǎn)”,因此在程序設(shè)計(jì)中應(yīng)注意空表和非空表的界限。</p><p>  2、演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運(yùn)

9、算命令:相應(yīng)的輸入數(shù)據(jù)和運(yùn)算結(jié)果顯示在其后。</p><p>  3、程序執(zhí)行的命令包括:</p><p>  1)構(gòu)造約瑟夫環(huán);2)執(zhí)行約瑟夫環(huán),并輸出出列人的序號(hào)以及相應(yīng)的密碼;</p><p><b>  3)結(jié)束。</b></p><p><b>  4、測(cè)試數(shù)據(jù)</b></p&

10、gt;<p>  1)m的初始值為20;</p><p>  2)n=7,7個(gè)人的密碼依次為:3、1、7、2、4、8、4。</p><p>  3)首先m值為6,正確的出列順序應(yīng)為6、1、4、7、2、3、5。</p><p><b>  1.2設(shè)計(jì)平臺(tái)</b></p><p>  Windows2000以上

11、操作系統(tǒng);Microsoft Visual C++ 6.0</p><p><b>  2概要設(shè)計(jì)</b></p><p>  已知n個(gè)人(以編號(hào)1,2,3...n分別表示)圍成一圈。從編號(hào)為1的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到一圈的人全部出列。這個(gè)就是約瑟夫環(huán)問題的實(shí)際場(chǎng)景,有一種是要通過輸入n

12、,m,k三個(gè)正整數(shù),來求出列的序列。這個(gè)問題采用的是典型的循環(huán)鏈表的數(shù)據(jù)結(jié)構(gòu),就是將一個(gè)鏈表的尾元素指針指向隊(duì)首元素。 p->link=head。解決問題的核心步驟:首先建立一個(gè)具有n個(gè)鏈結(jié)點(diǎn),無頭結(jié)點(diǎn)的循環(huán)鏈表。然后確定第1個(gè)報(bào)數(shù)人的位置。最后不斷地從鏈表中刪除鏈結(jié)點(diǎn),直到鏈表為空。</p><p>  改進(jìn)的約瑟夫環(huán)問題與原問題思路一致,只是不再采用單循環(huán)鏈表存儲(chǔ)結(jié)構(gòu),而采用雙向循環(huán)鏈表,而且用一個(gè)判斷

13、語句來決定報(bào)數(shù)的方向的順時(shí)針還是逆時(shí)針。本課程設(shè)計(jì)主要采用了類的數(shù)據(jù)結(jié)構(gòu),程序中包含了兩個(gè)類:Linklist , Joseph。</p><p>  為實(shí)現(xiàn)上述程序功能,應(yīng)以單向循環(huán)鏈表表示約瑟夫環(huán)。為此,需要兩個(gè)抽象數(shù)據(jù)類型:單向循環(huán)鏈表和約瑟夫環(huán)。</p><p>  1)、單向循環(huán)鏈表的抽象數(shù)據(jù)類型定義為:</p><p>  ADT List{</

14、p><p>  數(shù)據(jù)對(duì)象:D={ai|ai∈Elemset,i=1,2,…,n,n≥0}</p><p>  數(shù)據(jù)關(guān)系:R1={<a(i-1),ai>|a(i-1),ai∈D,i=2,…n}</p><p><b>  基本操作:</b></p><p>  InitList(&L)</p><p

15、>  操作結(jié)果:構(gòu)造一個(gè)空的鏈表L。</p><p>  DestroyList(&L)</p><p>  初始條件:線性表L已存在。</p><p>  操作結(jié)果:銷毀線性表L。</p><p>  ListLength(L)</p><p>  初始條件:線性表L已存在。</p>&l

16、t;p>  操作結(jié)果:返回L中數(shù)據(jù)元素個(gè)數(shù)。</p><p>  GetElem(L,i,&e)</p><p>  初始條件:線性表L已存在,1≤i≤ListLength(L)。</p><p>  操作結(jié)果:用e返回L中第i個(gè)數(shù)據(jù)元素的值。</p><p>  ListInsert(&L,I,e)</p>

17、<p>  初始條件:線性表L已存在,1≤i≤ListLength(L)+1。</p><p>  操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L的長度加1。</p><p>  ListDelete(&L,i,&e)</p><p>  初始條件:線性表L已存在且非空,1≤i≤ListLength(L)。</p>

18、<p>  操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長度減1。</p><p>  ListTraverse(L,visit())</p><p>  初始條件:線性表L已存在。</p><p>  操作結(jié)果:依次對(duì)L的每個(gè)數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗。 </p><p>  

19、}ADT List</p><p>  2)約瑟夫環(huán)的抽象數(shù)據(jù)類型定義為:</p><p><b>  ADT Set{</b></p><p>  數(shù)據(jù)對(duì)象:D={ai|ai為用戶輸入的數(shù)字密碼,i=1,2,…,n,1≤n≤7}</p><p><b>  數(shù)據(jù)關(guān)系:{}</b></p&

20、gt;<p><b>  基本操作:</b></p><p>  CreatSet(&L,s)</p><p>  初始條件:L為單向循環(huán)鏈表。</p><p>  操作結(jié)果:對(duì)鏈表中的數(shù)據(jù)域進(jìn)行賦值。</p><p>  DeleteSet(&L,i,&e)</p>

21、<p>  初始條件:線性表L已存在且非空,1≤i≤ListLength(L)。</p><p>  操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù)元素,并用e返回其值,L的長度減1。</p><p>  PrintSet(L)</p><p>  初始條件:鏈表L已存在。</p><p>  操作結(jié)果:按輸出次序顯示每個(gè)人的密碼。</p>

22、;<p><b>  }ADT Set</b></p><p>  3)本程序包含四個(gè)模塊:</p><p><b>  1、主程序模塊:</b></p><p>  Void main(){</p><p><b>  初始化;</b></p>

23、<p><b>  Do{</b></p><p><b>  接受命令;</b></p><p><b>  處理命令;</b></p><p>  } while (“命令”=”退出”);</p><p><b>  }</b></p&

24、gt;<p>  2、約瑟夫環(huán)單元模塊——實(shí)現(xiàn)約瑟夫環(huán)的抽象數(shù)據(jù)類型;</p><p>  3、單向循環(huán)鏈表單元模塊——實(shí)現(xiàn)單向循環(huán)鏈表的抽象數(shù)據(jù)類型;</p><p>  4、結(jié)點(diǎn)結(jié)構(gòu)單元模塊——定義單向循環(huán)鏈表的結(jié)點(diǎn)結(jié)構(gòu)。</p><p>  各模塊之間的調(diào)用關(guān)系如下:</p><p><b>  結(jié)點(diǎn)結(jié)構(gòu)單元模塊

25、</b></p><p><b>  ↓</b></p><p>  單向循環(huán)鏈表單元模塊</p><p><b>  ↓</b></p><p><b>  約瑟夫環(huán)單元模塊</b></p><p><b>  ↓</b&g

26、t;</p><p><b>  主程序模塊</b></p><p>  2.1類LinkList</p><p>  主要功能是創(chuàng)建結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)數(shù)值域包括data,password,還有指示前驅(qū)結(jié)點(diǎn)的指針llink,和指示后繼結(jié)點(diǎn)的指針rlink。</p><p>  2.2類Joseph</p>&l

27、t;p>  主要功能是實(shí)現(xiàn)創(chuàng)建雙向循環(huán)鏈表及一些相應(yīng)的操作。</p><p><b>  2.3類異常處理</b></p><p>  在C++程序中,可以使用try-throw-catch結(jié)構(gòu)處理程序異常。采用這一程序結(jié)構(gòu)能夠?qū)⑹褂煤蛯?shí)現(xiàn)分離:類和函數(shù)的實(shí)現(xiàn)者使用throw語句易地錯(cuò)誤類別通知使用者。使用者根據(jù)獲悉的錯(cuò)誤類別采取相應(yīng)的措施,這就是異常處理。&l

28、t;/p><p><b>  3詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)</b></p><p>  改進(jìn)約瑟夫環(huán)問題的基本思路和原問題基本一致,只是一個(gè)采用單循環(huán)鏈表,另一個(gè)采用雙向循環(huán)鏈表來解決問題。第一步是定義結(jié)構(gòu)變量結(jié)點(diǎn)linklist,并在該結(jié)點(diǎn)下定義結(jié)點(diǎn)的元素域:data,password,指針域:lLink和rLink。然后建立一個(gè)由n個(gè)鏈結(jié)點(diǎn),無表頭結(jié)點(diǎn)的雙向循環(huán)鏈表。并由構(gòu)造函數(shù)

29、對(duì)結(jié)點(diǎn)賦值,由隨機(jī)函數(shù)rand()產(chǎn)生每個(gè)結(jié)點(diǎn)的password。由于每個(gè)結(jié)點(diǎn)的password是由隨機(jī)函數(shù)產(chǎn)生的,也就是每個(gè)結(jié)點(diǎn)的password是后知的,所以在一開始人為地指定一個(gè)結(jié)點(diǎn)的順序,由此結(jié)點(diǎn)開始報(bào)數(shù)。報(bào)password個(gè)數(shù)后,報(bào)到的那個(gè)結(jié)點(diǎn)被刪除,它的password被記錄下,由它的下一個(gè)結(jié)點(diǎn)開始逆方向報(bào)數(shù)………如此循環(huán),直到循環(huán)鏈表里只剩下一個(gè)結(jié)點(diǎn),那就是問題所求的結(jié)果。具體到問題上,還需要?jiǎng)?chuàng)建一個(gè)Joseph類,由構(gòu)造

30、函數(shù)來初始化,輸入所有的人數(shù),也就是表長,然后指定由第幾個(gè)人開始報(bào)數(shù)。在Joseph類中定義一個(gè)GetWinner()函數(shù),由它來實(shí)現(xiàn)獲得最后的勝利者。并在該類中設(shè)置一個(gè)判斷語句來確定先由順時(shí)針報(bào)數(shù)并淘汰了一個(gè)人之后,再按逆時(shí)針順序報(bào)數(shù),如此交替進(jìn)行。</p><p>  主要功能實(shí)現(xiàn)的程序流程圖及核心代碼。</p><p><b>  算法流程圖:</b></

31、p><p>  3.1創(chuàng)建結(jié)點(diǎn)Node</p><p>  鏈表都是由一個(gè)個(gè)結(jié)點(diǎn)組成,由于結(jié)點(diǎn)的不同,組成的鏈表也不同。因此需要?jiǎng)?chuàng)建雙向鏈表結(jié)點(diǎn)。由于每一個(gè)結(jié)點(diǎn)有一個(gè)密碼和一個(gè)序號(hào),所以可以將結(jié)點(diǎn)結(jié)構(gòu)體定義為:</p><p>  struct Node{ </p><p><b>  int data;</b></p

32、><p>  int password;</p><p>  DNode* llink;</p><p>  DNode* rlink;} 圖3.1 結(jié)點(diǎn)Dnode</p><p>  3.2創(chuàng)建雙向循環(huán)鏈表</p><p>  創(chuàng)建一個(gè)空雙向循環(huán)鏈表,雙向循環(huán)鏈表和每個(gè)結(jié)點(diǎn)包括三個(gè)

33、域:Element,</p><p>  lLink,rLink.其中element為元素域,rLink域?yàn)橹赶蚝罄^結(jié)點(diǎn)的指針,新增的lLink域用以指向前驅(qū)結(jié)點(diǎn)。雙向鏈表也可以帶表頭結(jié)點(diǎn),并且也可以構(gòu)成雙向循環(huán)鏈表。此時(shí),表頭結(jié)點(diǎn)的rLink,lLink分別指向雙向循環(huán)鏈表的頭結(jié)點(diǎn)(或表頭結(jié)點(diǎn))和尾結(jié)點(diǎn)。</p><p>  一個(gè)結(jié)點(diǎn)的lLink域的指針指向它左邊結(jié)點(diǎn)的后部,這并不意味著

34、該結(jié)點(diǎn)的lLink域保存的仍是該左邊結(jié)點(diǎn)存儲(chǔ)塊的起始地址。在此處,指針指向某個(gè)結(jié)點(diǎn)任何部分都是等價(jià)的,都是指該存儲(chǔ)塊的起始位置。</p><p>  圖3.2 單表頭的雙向循環(huán)鏈表</p><p>  每當(dāng)結(jié)點(diǎn)計(jì)數(shù)到某一結(jié)點(diǎn)時(shí),將他的前驅(qū)結(jié)點(diǎn)接到他的后繼結(jié)點(diǎn),然后將他的密碼值password賦給計(jì)數(shù)變量,再將此結(jié)點(diǎn)刪除。如此循環(huán)下去,直到最后變?yōu)榭盏膯窝h(huán)鏈表為止。</p>

35、<p>  由于當(dāng)某個(gè)人退出圓圈后,報(bào)數(shù)的工作要從下一個(gè)人開始繼續(xù),剩下的人仍然是圍成一個(gè)圓圈的,可以使用循環(huán)表,由于退出圓圈的工作對(duì)應(yīng)著表中結(jié)點(diǎn)的刪除操作,對(duì)于這種刪除操作頻繁的情況,選用效率較高的鏈表結(jié)構(gòu),為了程序指針每一次都指向一個(gè)具體的代表一個(gè)人的結(jié)點(diǎn)而不需要判斷,鏈表不帶頭結(jié)點(diǎn)。所以,對(duì)于所有人圍成的圓圈所對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)采用一個(gè)不帶頭結(jié)點(diǎn)的循環(huán)鏈表來描述。設(shè)頭指針為front,front始終指向頭結(jié)點(diǎn),并定義指針cu

36、rrent記錄當(dāng)前的結(jié)點(diǎn)。并根據(jù)具體情況移動(dòng)(順逆時(shí)針)。</p><p>  為了記錄退出的人的先后順序,采用一個(gè)順序表進(jìn)行存儲(chǔ)。程序結(jié)束后再輸出依次退出的人的編號(hào)順序。由于只記錄各個(gè)結(jié)點(diǎn)的data值就可以。最后通過函數(shù)調(diào)用來輸出順序。要解決約瑟夫環(huán)問題,首先一點(diǎn)就是必須有一個(gè)環(huán),所以第一步我們必須建立一個(gè)雙向循環(huán)鏈表。而建立一個(gè)雙向循環(huán)鏈表必須有一個(gè)空的雙向循環(huán)鏈表,然后運(yùn)用尾插法建立一個(gè)雙向循環(huán)鏈表,這樣約

37、瑟夫環(huán)就創(chuàng)建出來了,接下來就是處理約瑟夫環(huán)問題。</p><p>  3.3從鏈表中刪除結(jié)點(diǎn)</p><p>  在雙向循環(huán)鏈表中,一個(gè)結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)地址保存在該結(jié)點(diǎn)的lLink域中,這樣可以方便地實(shí)現(xiàn)在一個(gè)指定結(jié)點(diǎn)之前插入一個(gè)新結(jié)點(diǎn)的操作,也可以方便地刪除某個(gè)指定結(jié)點(diǎn)。</p><p>  函數(shù)通過代碼:q->llink->rlink=q->rl

38、ink;q->rlink->llink=q->llink;delete q;</p><p>  來刪除當(dāng)前的那個(gè)結(jié)點(diǎn)q,通過循環(huán)來一次次刪除當(dāng)前的結(jié)點(diǎn),直到鏈表中剩下最后一個(gè)結(jié)點(diǎn)。</p><p><b>  具體程序如下:</b></p><p>  #include<stdio.h></p>&

39、lt;p>  #include<malloc.h></p><p>  #include<stdlib.h></p><p>  typedef struct node //定義單循環(huán)鏈表中節(jié)點(diǎn)的結(jié)構(gòu)</p><p><b>  {</b></p><p>  int num;//序列號(hào)即個(gè)

40、人的編號(hào)</p><p>  int cipher;//個(gè)人所持有的密碼</p><p>  struct node *next;</p><p>  }linklist;</p><p>  class YSFH</p><p><b>  {</b></p><p>&

41、lt;b>  public:</b></p><p>  linklist *Creat(int n);</p><p>  linklist *Select1(int m);</p><p>  linklist *head;//頭指針指示有n個(gè)結(jié)點(diǎn)的單循環(huán)鏈表creat</p><p>  protected:</

42、p><p>  linklist *Select(linklist *head,int m);</p><p><b>  private:</b></p><p>  linklist *p;//存放人員信息</p><p>  linklist *r;//臨時(shí)存放</p><p>  linkli

43、st *q;</p><p><b>  int k;</b></p><p><b>  };</b></p><p>  /*建立單循環(huán)鏈表函數(shù)*/</p><p>  linklist *YSFH::Creat(int n)</p><p><b>  {&l

44、t;/b></p><p>  linklist *head;</p><p>  linklist *p;</p><p>  p=(linklist *)malloc(sizeof(linklist));</p><p><b>  head=p;</b></p><p><b&g

45、t;  p->num=1;</b></p><p>  printf("隨機(jī)產(chǎn)生第1個(gè)人的密碼: ");</p><p>  p->cipher=rand()%10;</p><p>  {if(p->cipher==0)</p><p>  p->cipher=rand()%10;

46、</p><p><b>  }</b></p><p>  printf("%d\n",p->cipher);</p><p><b>  r=p;</b></p><p>  p->next=p;</p><p>  for(int k=2

47、;k<=n;k++)</p><p><b>  {</b></p><p>  p=(linklist *)malloc(sizeof(linklist));</p><p>  p->num=k;//給每人一個(gè)編號(hào)</p><p>  printf("隨機(jī)產(chǎn)生第%d個(gè)人的密碼: ",

48、k);</p><p>  p->cipher=rand()%10;</p><p>  {if(p->cipher==0)</p><p>  p->cipher=rand()%10;</p><p><b>  }</b></p><p>  printf("%d

49、\n",p->cipher);</p><p>  r->next=p;</p><p><b>  r=p;</b></p><p><b>  }</b></p><p>  p->next=head;</p><p>  return(hea

50、d);</p><p><b>  }</b></p><p>  /*決定出列編號(hào)*/</p><p>  linklist *YSFH::Select1(int m)</p><p><b>  {</b></p><p>  return Select(head,m);

51、</p><p><b>  }</b></p><p>  linklist *YSFH::Select(linklist *head,int m)</p><p><b>  {</b></p><p><b>  q=head;</b></p><p&

52、gt;<b>  k=1;</b></p><p>  p=q->next;//q為p的前驅(qū)指針,p指向當(dāng)前報(bào)數(shù)的人</p><p>  printf("出列的序號(hào)依次為:");</p><p>  //在head中的第一個(gè)結(jié)點(diǎn)起循環(huán)記數(shù)找第m個(gè)結(jié)點(diǎn)</p><p>  while(q!=p)&

53、lt;/p><p><b>  {</b></p><p>  k=k+1;//報(bào)一次數(shù)</p><p>  if(k%m==0)//所報(bào)數(shù)等于報(bào)數(shù)上限值時(shí)</p><p><b>  {</b></p><p>  printf("%d ",p->n

54、um);//輸出該結(jié)點(diǎn)的num值</p><p>  m=p->cipher;//把該結(jié)點(diǎn)的cipher(密碼)值賦給m</p><p>  q->next=p->next;//對(duì)應(yīng)的節(jié)點(diǎn)從鏈表中刪除</p><p><b>  free(p);</b></p><p><b>  k=0;&

55、lt;/b></p><p>  p=q->next;</p><p><b>  }</b></p><p><b>  else{</b></p><p><b>  q=p;</b></p><p>  p=p->next;//p

56、指向當(dāng)前報(bào)數(shù)的人</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  head=p;</b></p><p>  return(head);</p><p><b>  }</b&g

57、t;</p><p>  void main()</p><p><b>  {</b></p><p><b>  int n,m;</b></p><p><b>  m!=0;</b></p><p><b>  YSFH Y;</

58、b></p><p>  printf("輸入總?cè)藬?shù)n: ");</p><p>  scanf("%d",&n);</p><p>  Y.head=Y.Creat(n);</p><p>  printf("隨機(jī)產(chǎn)生第一次的報(bào)數(shù)上限值m: ");</p&g

59、t;<p>  m=rand()%10;</p><p><b>  {</b></p><p><b>  if(m==0)</b></p><p>  m=rand()%10;</p><p><b>  }</b></p><p> 

60、 printf("%d\n",m);</p><p>  Y.head=Y.Select1(m);</p><p>  printf("%d\n",Y.head->num);</p><p><b>  }</b></p><p><b>  4調(diào)試與操作說明<

61、;/b></p><p><b>  4.1調(diào)試情況</b></p><p>  這次的課程設(shè)計(jì)的代碼很冗長,所以等有了解題思路后,把代碼都寫上后難免會(huì)有很多錯(cuò)誤。當(dāng)?shù)谝淮伟颜麄€(gè)程序?qū)懞煤筮\(yùn)行,出現(xiàn)了很多錯(cuò)誤。不過經(jīng)過一點(diǎn)點(diǎn)的改正,錯(cuò)誤也慢慢地變少。這也說明做事要認(rèn)真,尤其做計(jì)算機(jī)這方面工作的時(shí)候,因?yàn)橛?jì)算機(jī)不容許不一點(diǎn)點(diǎn)的錯(cuò)誤,有了一點(diǎn)小錯(cuò)誤和有一個(gè)大錯(cuò)誤在計(jì)

62、算機(jī)看來都是一樣的,都不會(huì)得不到結(jié)果。有些小錯(cuò)誤,比如說少了個(gè)分號(hào),變量忘了定義,數(shù)據(jù)溢出等都是些小錯(cuò)誤,但也不能松懈。因?yàn)橐⒁獾牡胤胶芏?,?jīng)過多次嘗試,問題也就自然而然的解決了,而且以后遇到這方面的問題都會(huì)覺得比較得心應(yīng)手。</p><p>  在隨機(jī)設(shè)置每個(gè)結(jié)點(diǎn)的password時(shí)也曾是個(gè)問題,因?yàn)槲易龅碾S機(jī)函數(shù)一直都用不好,要不是每次隨到的都是一樣的,要么就是每次隨到的數(shù)都很大,后來通過老師的耐心講解才得

63、以解決。</p><p>  在調(diào)試的過程中,類的優(yōu)勢(shì)很明顯,能很簡單的把問題解決,而不需要使用的其他的一些比較復(fù)雜的方法。</p><p><b>  4.2操作說明</b></p><p>  生成界面如圖4.1,4.2所示:</p><p><b>  圖4.1 生成界面</b></p&

64、gt;<p><b> ?。?lt;/b></p><p><b>  圖4.2生成界面</b></p><p>  當(dāng)程序運(yùn)行的時(shí)候會(huì)出現(xiàn)如上圖所示的提示,要求使用者輸入程序中所需的輸入總?cè)藬?shù),使用者只需輸入自己所想的總?cè)藬?shù),系統(tǒng)便會(huì)隨機(jī)產(chǎn)生每個(gè)人對(duì)應(yīng)的密碼,同時(shí)隨機(jī)產(chǎn)生第一次的報(bào)數(shù)上限值。最后系統(tǒng)會(huì)給出出列的次序,最后產(chǎn)生的編號(hào)便是此

65、次游戲的獲勝者。使用者還可按下任意鍵,進(jìn)行下一次的游戲。</p><p><b>  5設(shè)計(jì)總結(jié)</b></p><p>  心得、體會(huì)、收獲、下一步的改進(jìn)等。</p><p><b>  參 考 文 獻(xiàn)</b></p><p>  1張乃孝,裘宗燕.數(shù)據(jù)結(jié)構(gòu)C++與面向?qū)ο蟮耐緩?北京:高等教育出

66、版社,1998</p><p>  2 周云靜.?dāng)?shù)據(jù)結(jié)構(gòu)習(xí)題解析與上機(jī)指導(dǎo).北京:冶金工業(yè)出版社,2004</p><p>  3 陳慧南.?dāng)?shù)據(jù)結(jié)構(gòu)—C++語言描述.北京:人民郵電出版社,2005</p><p>  4 嚴(yán)蔚敏,吳偉民.?dāng)?shù)據(jù)結(jié)構(gòu).北京:清華大學(xué)出版社,1997</p><p>  5 Adam Drozdek.?dāng)?shù)據(jù)結(jié)構(gòu)與算法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論