版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)學(xué)與計算機學(xué)院</b></p><p><b> 課程設(shè)計說明書</b></p><p> 課 程 名 稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 </p><p> 課 程 代 碼: </p><p> 題 目:
2、 猴子選大王 </p><p> 年級/專業(yè)/班: 2010級軟件工程2班 </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 號: </p><p> 開 始 時 間: 2011 年 11 月 9 日</
3、p><p> 完 成 時 間: 2011 年 12 月 30 日</p><p><b> 課程設(shè)計成績:</b></p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計 任 務(wù) 書</p><p>&l
4、t;b> 一、設(shè)計題目</b></p><p><b> 猴子選大王</b></p><p><b> 主要內(nèi)容</b></p><p> 一堆猴子都有編號,編號是1,2,3 ...m ,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個,該猴子就要離開此圈,這樣依次下來,直到圈
5、中只剩下最后一只猴子,則該猴子為大王。</p><p> 三、具體要求及應(yīng)提交的材料</p><p> 要求:使用數(shù)組和循環(huán)鏈表等兩種以上的存儲方式來做輸入數(shù)據(jù):輸入m,n m,n 為整數(shù),n<m輸出形式:中文提示按照m個猴子,數(shù)n 個數(shù)的方法,輸出為大王的猴子是幾號 ,建立一個函數(shù)來實現(xiàn)此功能</p><p> 用C/C++語言編程實現(xiàn)上述內(nèi)容,對
6、每個問題寫出一個算法實現(xiàn),并按數(shù)學(xué)與計算機學(xué)院對課程設(shè)計說明書規(guī)范化要求,寫出課程設(shè)計說明書,并提交下列材料:</p><p> 1)課程設(shè)計說明書打印稿一份</p><p> 2)課程設(shè)計說明書電子稿一份;</p><p> 3)源程序電子文檔一份。</p><p> 四、主要技術(shù)路線提示</p><p>
7、 可采用數(shù)組、鏈表數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。在此基礎(chǔ)上用C/C++實現(xiàn)其操作。</p><p><b> 五、進度安排</b></p><p> 按教學(xué)計劃規(guī)定,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計為2周,其進度及時間大致分配如下:</p><p><b> 六、推薦參考資料</b></p><p> [1] 嚴蔚敏,吳偉
8、民.數(shù)據(jù)結(jié)構(gòu).清華大學(xué)出版社出版。 </p><p> [2] 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)題集(C語言版) .清華大學(xué)出版社.2003年5月。</p><p> [3] 唐策善,李龍澎.數(shù)據(jù)結(jié)構(gòu)(作C語言描述) .高等教育出版社.2001年9月</p><p> [4] 朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)(C++語言描述)(第二版本).高等出版社出版.2004年4月</
9、p><p> [5] 胡學(xué)鋼.數(shù)據(jù)結(jié)構(gòu)(C語言版) .高等教育出版社.2004年8月</p><p> [6] 徐孝凱 等著.數(shù)據(jù)結(jié)構(gòu)(C語言描述).清華大學(xué)出版社.2004</p><p> 指導(dǎo)教師 簽名日期 年 月 日</p><p> 系 主 任 審核日期 年 月
10、 日</p><p><b> 目 錄 </b></p><p><b> 摘 要4</b></p><p><b> 引 言5</b></p><p><b> 1 需求分析5</b></p><p>
11、1.1任務(wù)與分析5</p><p><b> 1.2測試數(shù)據(jù)6</b></p><p><b> 2 概要設(shè)計6</b></p><p> 2.1 ADT描述6</p><p> 2.2程序模塊結(jié)構(gòu)7</p><p> 2.21 結(jié)構(gòu)體定義7</p
12、><p> 2.3 各功能模塊8</p><p><b> 3 詳細設(shè)計9</b></p><p> 3.1結(jié)構(gòu)體定義9</p><p> 3.2 初始化10</p><p> 3.3 插入操作10</p><p><b> 4 調(diào)試分析15&
13、lt;/b></p><p> 5 用戶使用說明15</p><p><b> 6 測試結(jié)果16</b></p><p> 6.1 界面運行結(jié)果16</p><p> 6.2子功能測試運行結(jié)果:16</p><p> 6.3 結(jié)束界面(如下圖)18</p>
14、<p><b> 結(jié) 論19</b></p><p><b> 致 謝20</b></p><p><b> 參考文獻21</b></p><p><b> 摘 要 </b></p><p> 隨著計算機的普及,涉及計算機
15、相關(guān)的科目也越來越普遍,其中數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)重要的專業(yè)基礎(chǔ)課程與核心課程之一,為適應(yīng)我國計算機科學(xué)技術(shù)的發(fā)展和應(yīng)用,學(xué)好數(shù)據(jù)結(jié)構(gòu)非常必要,然而要掌握數(shù)據(jù)結(jié)構(gòu)的知識非常難,所以對“數(shù)據(jù)結(jié)構(gòu)”的課程設(shè)計比不可少。</p><p> 本課程設(shè)計主要通過使用循環(huán)鏈表、數(shù)組、以及單向鏈表,將猴子編號來數(shù)據(jù)化待選猴子坐成一個圈,并對圈內(nèi)的猴子進行報數(shù)選取大王。最終輸出選出的猴子大王的編號。</p><
16、;p> 考慮到循環(huán)鏈表、數(shù)組、以及單向鏈表要使用不同的結(jié)構(gòu)體、算法等,故將不同的三種方法設(shè)計為分開的三個類。只在主函數(shù)中調(diào)用其相應(yīng)的函數(shù)。程序通過調(diào)試運行,結(jié)果與預(yù)計結(jié)果一致,初步實現(xiàn)了設(shè)計功能。</p><p> 關(guān)鍵詞:現(xiàn)代版;隊列(循環(huán)鏈表);隊列(數(shù)組);單向鏈表 ;數(shù)據(jù)結(jié)構(gòu)</p><p><b> 引 言 </b></p>&l
17、t;p><b> 課程設(shè)計任務(wù)</b></p><p> 本課程設(shè)計主要實現(xiàn)在循環(huán)鏈表、數(shù)組、單向鏈表三種不同存儲結(jié)構(gòu)下對問題(即:“一堆猴子都有編號,編號是1,2,3 ...m ,這群猴子(m個)按照1-m的順序圍坐一圈,從第1開始數(shù),每數(shù)到第N個,該猴子就要離開此圈,這樣依次下來,直到圈中只剩下最后一只猴子,則該猴子為大王?!保崿F(xiàn)要求。依據(jù)猴子的編號數(shù)據(jù)化將猴子用以上方式存儲
18、。并進行報數(shù)入隊,與出隊操作。最終輸出最后一位猴子編號,該猴子為此次當(dāng)選的猴王。</p><p><b> B、課程設(shè)計性質(zhì)</b></p><p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計是重要地實踐性教學(xué)環(huán)節(jié)。在進行了程序設(shè)計語言課和《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)的基礎(chǔ)上,設(shè)計實現(xiàn)相關(guān)的數(shù)據(jù)結(jié)構(gòu)經(jīng)典問題,有助于加深對數(shù)據(jù)結(jié)構(gòu)課程的認識。本課程設(shè)計是數(shù)據(jù)結(jié)構(gòu)中的一個關(guān)于數(shù)組、鏈表等算法的實現(xiàn),
19、包括在存儲結(jié)構(gòu)中添加、刪除操作,最后把結(jié)果輸出。此課程設(shè)計要求對數(shù)組存儲結(jié)構(gòu)和鏈表存儲結(jié)構(gòu)非常熟悉,并能熟練使用它們。</p><p><b> C、課程設(shè)計目的</b></p><p> 其目的是讓我們在學(xué)習(xí)完C++、數(shù)據(jù)結(jié)構(gòu)等課程基礎(chǔ)上,掌握數(shù)據(jù)的存儲結(jié)構(gòu)、掌握數(shù)據(jù)相應(yīng)的存儲,添加,更新等操作,并用輸出結(jié)果。進一步掌握設(shè)計、實現(xiàn)較大系統(tǒng)的完整過程,包括系統(tǒng)分析
20、、編碼設(shè)計、系統(tǒng)集成、以及調(diào)試分析,熟練掌握數(shù)據(jù)結(jié)構(gòu)的選擇、設(shè)計、實現(xiàn)以及操作方法,為進一步的應(yīng)用開發(fā)打好基礎(chǔ)。</p><p><b> 1 需求分析</b></p><p><b> 1.1任務(wù)與分析</b></p><p> 猴子選大王,眾多猴子紛紛想成為大王,以一統(tǒng)群族。更便享有最高的地位與權(quán)利,因而導(dǎo)致猴子
21、間慘重的事件發(fā)生。在現(xiàn)代發(fā)展的社會中不管人類還是猴子都不想看到如此不幸的畫面。故利用計算機軟件來解決血腥的沖突。</p><p> 即將編號為1,2,……n的一群猴子按照1-n的順序圍坐成一個圈,所以可以用數(shù)組將其以循環(huán)的方式存儲,輸入猴子的總數(shù)m與要報的數(shù)n,且保證n<m。還用rear表示數(shù)組尾front數(shù)組頭,并進行報數(shù),將未報到指定數(shù)的猴子加到rear;用鏈表時可以用指針結(jié)點將一個猴子作為一個結(jié)點存
22、儲,也用front表示鏈表頭,rear表示鏈表尾。將未到報數(shù)的猴子加到鏈表尾;循環(huán)鏈表就將鏈表的頭尾連接,不用將未報到n的猴子加到尾部,只需將報到n的猴子結(jié)點刪除。最后輸出最后一個猴子的信息,便得出該猴子為此次選舉的猴子大王。具體步驟如下:</p><p> 第一步 建立數(shù)組(鏈表),填入猴子編號及猴子出局時報的數(shù);</p><p> 第二步 從第一個猴子報數(shù);</p>
23、<p> 第三步 數(shù)組存儲中將數(shù)m的猴子不作操作,將未數(shù)到的猴子循環(huán)存在數(shù)組中,可以將報過數(shù)的信息猴子覆蓋。鏈表中將報到的猴子結(jié)點刪除;</p><p> 第四步 繼續(xù)報數(shù),重復(fù)第三步。到只剩一個猴子編號;</p><p> 第五步 輸出此猴子的信息。</p><p><b> 1.2測試數(shù)據(jù) </b></p>
24、<p> 1)、輸入猴子數(shù)與出局報數(shù)</p><p><b> 5 2</b></p><p><b> 第3個猴子是大王</b></p><p> 2)、輸入猴子數(shù)與出局報數(shù)</p><p><b> 43 13</b></p><
25、p><b> 第10個猴子是大王</b></p><p> 3)、輸入猴子數(shù)與出局報數(shù)</p><p><b> 121 31</b></p><p><b> 第84個猴子是大王</b></p><p><b> 2 概要設(shè)計</b>&
26、lt;/p><p><b> 2.1 ADT描述</b></p><p><b> ADT Node{</b></p><p> 數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,3,…,m}</p><p> 數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-1,ai∈≥D,i=2,
27、3,…,m}</p><p><b> 基本操作:</b></p><p><b> 創(chuàng)建數(shù)組,鏈表</b></p><p> 輸入編號猴子信息,進入存儲于數(shù)組,鏈表中</p><p> 報數(shù)開始,報到出局數(shù)的猴子出局</p><p> 輸出選出的猴子大王信息<
28、;/p><p><b> 等等</b></p><p><b> }ADT Node</b></p><p> 2.2程序模塊結(jié)構(gòu) </p><p> 圖2.1 猴子選大王系統(tǒng)模塊結(jié)構(gòu)圖</p><p> 2.21 結(jié)構(gòu)體定義</p><p>
29、 如下是三種不同存儲方式的存儲結(jié)構(gòu)概要設(shè)計</p><p><b> a).數(shù)組定義:</b></p><p> 如下是對數(shù)組方式的定義,包含數(shù)組的大小,元素的定義,并用類對其進行封裝。</p><p> #include <iostream.h> //命名空間</p><p> const ma
30、x=100; //宏定義數(shù)組的大小</p><p> typedef int ElemType; //定義一個元素類型為整型</p><p> class seq //創(chuàng)建一個類將其進行封裝</p><p><b> {private:</b></p><p> ElemType elem[
31、max]; //存儲數(shù)組為私有</p><p> int front,rear; //在此建立私有的隊列頭、尾</p><p><b> public:};</b></p><p> b).單向鏈表定義:</p><p> 如下是單向鏈?zhǔn)降慕Y(jié)構(gòu)體包含一個數(shù)域和一個指下的指針域,數(shù)值域。并也對
32、其用類進行封裝,使其更佳。</p><p> struct Node //單向鏈表中每個結(jié)點包含一個數(shù)域和一個指下的指針域 </p><p> { int data; //數(shù)值域</p><p> Node *next;}; //指針域,指向鏈表的下一個結(jié)點</p><p> class da
33、nx //建類進行封裝</p><p> {private: </p><p> Node *top; //創(chuàng)建頭指針 </p><p> public:}; </p><p> c).循環(huán)鏈表定義:</p><p> 如下是單向鏈?zhǔn)降慕Y(jié)構(gòu)體包含一個數(shù)域和一個指下的指針域,數(shù)值域
34、。并也對其用類進行封裝,使其更佳。其中含有一個頭指針,用于對其中初始結(jié)點的指向。</p><p> struct NodeType //鏈表結(jié)點的結(jié)構(gòu)體</p><p> { int num; //數(shù)值域,存儲猴子編號</p><p> NodeType *next; }; //指針域,指向下一個猴子結(jié)點</p&
35、gt;<p> class xunh { </p><p><b> private: </b></p><p> NodeType *Head; // 將頭指針設(shè)為私有</p><p><b> public:};</b></p><p><b> 2.
36、3 各功能模塊</b></p><p> 1、數(shù)組方式包含有構(gòu)造函數(shù),析構(gòu)函數(shù),還有進行創(chuàng)建(即錄入操作),與報數(shù)輸出操作。各功能模塊如下:</p><p> class seq //數(shù)組存儲的類</p><p><b> {private:</b></p><p><b>
37、public:</b></p><p> seq(){} // 數(shù)組存儲的構(gòu)造函數(shù)</p><p> ~seq(){}; //析構(gòu)函數(shù)</p><p> void jin(); //輸入存儲操作</p><p> void chu(); //報數(shù)輸出操作</p><p>
38、;<b> };</b></p><p> 2、單向鏈表方式包含有構(gòu)造函數(shù),析構(gòu)函數(shù),還有進行創(chuàng)建(即錄入操作),與報數(shù)輸出操作。各功能模塊如下:</p><p> class danx // 單向鏈表的類</p><p> { private: </p><p><b>
39、; public:</b></p><p> danx( ){ }; //單向鏈表操作的構(gòu)造函數(shù)</p><p> ~danx(){ }; //析構(gòu)函數(shù)</p><p> void creat(); //創(chuàng)建鏈表,輸入猴子信息</p><p> void outs(); //報數(shù)輸出操作</p&
40、gt;<p><b> };</b></p><p> 3、循環(huán)鏈表方式包含有構(gòu)造函數(shù),析構(gòu)函數(shù),還有進行創(chuàng)建(即錄入操作),與報數(shù)輸出操作。各功能模塊如下:</p><p> class xunh //循環(huán)鏈表的類 </p><p><b> { </b><
41、/p><p> private: </p><p><b> public:</b></p><p> xunh( ){ }; //循環(huán)鏈表的構(gòu)造函數(shù)</p><p> ~xunh(){ }; //析構(gòu)函數(shù)</p><p> void creat(); //創(chuàng)建循環(huán)鏈表
42、,輸入信息</p><p> void outs();}; //報數(shù)輸出大王信息</p><p><b> 3 詳細設(shè)計</b></p><p><b> 3.1結(jié)構(gòu)體定義</b></p><p> 1、數(shù)組結(jié)構(gòu)體定義如下:</p><p> 對數(shù)組的大小進行
43、限制在100,并定義一個整型元素。</p><p> const max=100; //宏定義數(shù)組上線大小為100</p><p> typedef int ElemType; //定義整型元素類型ElemType</p><p> 2、單向鏈表結(jié)構(gòu)體定義如下:</p><p> 單向鏈表中每個結(jié)點包含一個數(shù)域和一個指
44、下的指針域,定義值域,存儲猴子編號,還定義一個指針域用與連接操作。</p><p> struct Node //單向鏈表中每個結(jié)點包含一個數(shù)域和一個指下的指針域 </p><p> {int data; // 定義值域,存儲猴子編號</p><p> Node *next; }; //定義指針域指向下一個結(jié)點
45、</p><p> 3、循環(huán)鏈表結(jié)構(gòu)體定義如下:</p><p> struct NodeType //也包含數(shù)值域和一個指針域 </p><p> { int num; //值域,存儲猴子編號 </p><p> NodeType *next; }; //指針域指向下一個結(jié)點<
46、/p><p><b> 3.2 初始化</b></p><p> 其數(shù)組中表示頭與尾的指針進行初始化:</p><p> 只要在數(shù)組類的構(gòu)造函數(shù)中將定義的頭與尾初始化到第一個數(shù)。</p><p><b> class seq</b></p><p><b>
47、{</b></p><p><b> private:</b></p><p><b> public:</b></p><p> seq(){front=0;rear=0;} //將數(shù)組中頭尾指針初始化指向第一個數(shù)</p><p><b> };</b&g
48、t;</p><p><b> 3.3 插入操作</b></p><p> 1、如下是對數(shù)組方式功能的操作:</p><p><b> 創(chuàng)建,錄入數(shù)組:</b></p><p> void seq::jin() //創(chuàng)建操作</p><p><b> {
49、</b></p><p> cout<<"\n..........歡迎使用數(shù)組方式選取大王........"<<endl;</p><p> int m; //猴子的總數(shù)</p><p><b> do{</b></p><p> cout<&
50、lt;"\n 請輸入猴子的總數(shù)(<100):";</p><p><b> cin>>m;</b></p><p> if(m>100||m<0) //判斷猴子的總數(shù)是否正確,輸出提示</p><p><b> {</b></p>&l
51、t;p> cout<<" 數(shù)據(jù)輸入出錯!";</p><p><b> }</b></p><p> }while(m>100||m<0); //do{}while語句使得m的值輸入正確</p><p> for(int i=0;i<m;i++) //將編號存
52、入數(shù)組</p><p><b> {</b></p><p> elem[i]=i+1; </p><p><b> }</b></p><p> rear=m-1; //將尾指針指向數(shù)組的尾</p><p><b> }</b><
53、/p><p><b> 報數(shù)輸出結(jié)果:</b></p><p> void seq::chu() //報數(shù)輸出操作</p><p><b> {</b></p><p> int n; //定義出局報的數(shù)</p><p> cout<<
54、"\n 輸入報數(shù)值n(n>=2):"; </p><p> cin>>n; //輸入報數(shù)的值</p><p> cout<<"\n根據(jù)報數(shù)值"<<n<<",開始選猴大王..."<<endl;</p><p> if(
55、front==rear) //判斷隊列是否為空</p><p> cout<<" 存儲錯誤!隊列為空!"<<endl;</p><p> else //當(dāng)數(shù)組存儲不為空時</p><p><b> {</b></p><
56、;p> cout<<"\n報數(shù)結(jié)束,最終成為猴子大王的是(編號):";</p><p> while(front!=rear) //頭尾相等表示報數(shù)結(jié)束</p><p><b> {</b></p><p> for(int i=1;i<n;i++) //對出局報數(shù)循環(huán),
57、使報到的猴子出局</p><p><b> {</b></p><p> rear=(rear+1)%max; //實現(xiàn)在數(shù)組中循環(huán)存儲,讓尾指向下一個,但不出數(shù)組</p><p> elem[rear]=elem[front]; //實現(xiàn)讓隊頭報數(shù)后的猴子接在隊尾</p><p> front
58、=(front+1)%max; //在循環(huán)中頭指針不出數(shù)組</p><p><b> }</b></p><p> front=front+1; //正好報到數(shù)的猴子出隊</p><p><b> }</b></p><p> cout<<elem[front]
59、; //選擇猴王結(jié)束,輸出猴王編號</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p> 2、如下是對單向鏈表方式功能的操作:</p><p> void dan
60、x::creat() //創(chuàng)建操作</p><p><b> { </b></p><p> cout<<"\n..........歡迎使用單向鏈表方式選取大王........"<<endl;</p><p> int i=0, m; //猴子總數(shù)m</p><
61、;p> Node *newp, *pre; //新聲明兩結(jié)點,創(chuàng)建時pre作為尾結(jié)點</p><p> cout<<"\n 請輸入猴子的總數(shù): "; </p><p><b> cin>>m;</b></p><p> for(i=0;i<m;i++)
62、 //用循環(huán)方式創(chuàng)建鏈表 </p><p><b> { </b></p><p> newp=new Node; //對newp初始化</p><p> newp->next=NULL; </p><p> newp->data=i+1;
63、 </p><p> if(i==0) //如果鏈表中還沒有數(shù)據(jù)存入,將存入第一個數(shù)據(jù)</p><p><b> {</b></p><p> top=newp; //及將其在頭結(jié)點</p><p> pre= top; </p><p><b> }</b>
64、;</p><p><b> else</b></p><p><b> {</b></p><p> pre->next=newp; //如果頭結(jié)點有元素,就存在為結(jié)點的下一個</p><p> pre=newp; //將尾結(jié)點指向下一個</p><p&g
65、t;<b> }</b></p><p> } </p><p><b> } </b></p><p> void danx::outs( ) //單向鏈表的輸出操作</p><p><b> { </b></
66、p><p> int n,i; //n為報數(shù)值,i為局部循環(huán)數(shù)值</p><p> Node *q=top;</p><p> while(q->next!=NULL) //將p指針指向連尾</p><p><b> {</b></p><p> q=q->next;
67、 //如果q還不是尾結(jié)點,就下移</p><p><b> }</b></p><p> cout<<"\n 輸入報數(shù)值n(n>=2):"; </p><p><b> cin>>n;</b></p><p> cout
68、<<"\n根據(jù)報數(shù)值"<<n<<",開始選猴大王..."<<endl;</p><p> cout<<"\n報數(shù)結(jié)束,最終成為猴子大王的是(編號):";</p><p> while(top->next!=NULL) //當(dāng)頭結(jié)點的下一個為空時,表示報數(shù)結(jié)
69、束</p><p><b> {</b></p><p> Node *p; //創(chuàng)建一個指針,進行報數(shù)操作</p><p> for(i=1;i<n;i++) //循環(huán)方式將報完數(shù)的猴子接到連尾</p><p><b> {</b></p><p>
70、 p=top; //p指向頭結(jié)點</p><p> top=top->next; //報數(shù)時將頭指針下移</p><p> p->next=NULL; //令p的指針域指空</p><p> q->next=p; //將p連接到連表尾</p><p> q=p; //q下移</
71、p><p><b> }</b></p><p><b> p=top;</b></p><p> top=top->next; //top頭指針下移</p><p> delete p; //刪除報到指定數(shù)的結(jié)點</p><p><b>
72、 }</b></p><p> cout<<top->data<<endl; //輸出當(dāng)選猴大王猴子的編號</p><p><b> } </b></p><p> 3、如下是對循環(huán)鏈表方式功能的操作:</p><p> void xunh::creat()
73、 //創(chuàng)建操作</p><p><b> { </b></p><p> cout<<"\n...........歡迎使用循環(huán)鏈表方式選取大王........."<<endl;</p><p> int i=0, m; //猴子總數(shù)m</p><p>
74、 NodeType *newp, *pre; //新聲明兩結(jié)點,創(chuàng)建時pre作為尾結(jié)點</p><p> cout<<"\n 請輸入猴子的總數(shù): "; </p><p> cin>>m; //輸入猴子總數(shù)</p><p> for(i=0;i<m;i++) //創(chuàng)
75、建循環(huán)鏈表</p><p><b> { </b></p><p> newp=new NodeType; </p><p> newp->next=NULL;</p><p> newp->num=i+1; </p><p> if(i==0) //如果鏈表中
76、還沒有數(shù)據(jù)存入,將存入第一個數(shù)據(jù)</p><p><b> {</b></p><p> Head=newp;</p><p> pre= Head;</p><p><b> }</b></p><p> else //如果頭結(jié)點有元素,就存在為結(jié)點
77、的下一個</p><p><b> {</b></p><p> newp->next=Head; //將尾與頭連接構(gòu)成循環(huán)</p><p> pre->next=newp;</p><p> pre=newp; </p><p><b> }</b&g
78、t;</p><p> } </p><p><b> } </b></p><p> void xunh::outs( ) //循環(huán)鏈表的輸出操作 </p><p><b> { </b></p><p> in
79、t n,i; //猴子總數(shù)m,局部數(shù)值i</p><p> NodeType *q=Head, *p; //新建結(jié)點q并指向頭</p><p> cout<<"\n 輸入報數(shù)值n(n>=2):"; </p><p> cin>>n; //輸入要報的數(shù)</p><p>
80、 cout<<"\n根據(jù)報數(shù)值"<<n<<",開始選猴大王..."<<endl;</p><p> cout<<"\n報數(shù)結(jié)束,最終成為猴子大王的是(編號):";</p><p> while(q->next!=q) //判斷:當(dāng)qd的下一個為空時,
81、則報數(shù)結(jié)束</p><p><b> {</b></p><p> for(i=1;i<n;i++)</p><p><b> {</b></p><p> p=q; q=q->next; //在循環(huán)中將不對未報到出局數(shù)的結(jié)點操作,進行下一個報數(shù)</p><
82、;p> } </p><p> p->next=q->next; //將報到出局數(shù)的結(jié)點取出</p><p> delete q; //刪除報到數(shù)的結(jié)點</p><p> q=p->next; //將斷點連接</p><p><b> }&l
83、t;/b></p><p> cout<<q->num<<endl; //輸出最后結(jié)點信息,為當(dāng)選猴王</p><p> delete q; //刪除結(jié)點</p><p><b> } </b></p><p> 4、如下是主函數(shù)的實現(xiàn)調(diào)用操作:</p>
84、<p> 在主函數(shù)中使用switch…case語句將上述三個功能進行界面處理顯示,并對用戶人性化設(shè)計,并創(chuàng)建三個相應(yīng)類的對象,在switch…case語句中,能根據(jù)用戶的選項作出相應(yīng)的函數(shù)調(diào)用。體如下:</p><p> int main()</p><p><b> { </b></p><p> int k; //在
85、switch語句中用到的選擇值</p><p> seq s; //創(chuàng)建數(shù)組方式的對象</p><p> danx f; //創(chuàng)建單向鏈表的對象</p><p> xunh d; //創(chuàng)建循環(huán)方式的對象</p><p> cout<<"\n.............歡迎進入猴子選大王系統(tǒng).......
86、...."<<endl;</p><p> cout<<"\n************************************************ ";</p><p> do //對用戶界面進行美化 ,并提供相關(guān)的選項供用戶選擇</p><p><b> {</b>
87、;</p><p> cout<<"\n\n| 1.使用數(shù)組方式選取大王 |";</p><p> cout<<"\n\n| 2.使用單向鏈表方式選取大王 |";</p><p> cout<<"
88、\n\n| 3.使用循環(huán)鏈表方式選取大王 |";</p><p> cout<<"\n\n| 4.結(jié)束程序 |";</p><p> cout<<"\n**********************************
89、**************";</p><p> cout<<"\n 請輸入你的選擇(1,2,3,4): "; </p><p> cin>>k; //用戶輸入選擇</p><p><b> switch(k)</b></p><p>&
90、lt;b> {</b></p><p> case 1: //選擇1就調(diào)用數(shù)組類的方式</p><p><b> {</b></p><p> s.jin(); //創(chuàng)建</p><p> s.chu(); //報數(shù),輸出</p><p>
91、; cout<<endl;</p><p> cout<<endl;</p><p><b> }break;</b></p><p> case 2://選擇2就調(diào)用單向鏈表的操作</p><p><b> {</b></p><p>
92、 f.creat(); //創(chuàng)建</p><p> f.outs(); //報數(shù),輸出</p><p> cout<<endl;</p><p> cout<<endl;</p><p><b> }break;</b></p><p> ca
93、se 3: //選擇3就調(diào)用循環(huán)方式的操作</p><p><b> { </b></p><p> d.creat(); //創(chuàng)建</p><p> d.outs(); //報數(shù),輸出</p><p> cout<<endl;</p><p> cout
94、<<endl;</p><p><b> }break;</b></p><p> default:break; //其他就結(jié)束} </p><p> cout<<"\n************************************************ ";</p>
95、<p> }while(k>=1&&k<4);</p><p> cout<<"\n 再見!";</p><p> cout<<"\n 按任意鍵,返回。"<<endl;</p><p> return 0;}</
96、p><p><b> 4 調(diào)試分析</b></p><p> 由于此次的課程設(shè)計題目所需要的相關(guān)知識大多數(shù)可在《數(shù)據(jù)結(jié)構(gòu)》書中找到,或借鑒。所以在完成代碼后運行時,沒出現(xiàn)嚴重錯誤和問題。只是有點小問題,即局部變量用錯:沒定義的也用了。調(diào)試并找出錯誤,進行修改。最后獲得成功。</p><p><b> 5 用戶使用說明</b&g
97、t;</p><p> 該系統(tǒng)具有簡單、明了、使用等特點,能夠方便、準(zhǔn)確的計算出眾多猴子編號選舉大王的結(jié)果。當(dāng)使用該系統(tǒng)時,系統(tǒng)會給出相關(guān)的提示信息,用戶只需根據(jù)提示信息,即可完成系統(tǒng)提供的所有功能。</p><p><b> 6 測試結(jié)果</b></p><p> 6.1 界面運行結(jié)果</p><p> 系統(tǒng)運
98、行主界面如圖6.1所示:</p><p><b> 圖6.1 主界面</b></p><p> 6.2子功能測試運行結(jié)果: </p><p> A)數(shù)組方式選取大王, 如圖6.21所示:</p><p> 圖6.2數(shù)組方式選舉大王</p><p> B) 單向鏈表方式選取大王,如
99、圖6.22:</p><p> 圖6.3 單向選舉大王</p><p> C) 循環(huán)方式選舉,如圖6.23所示:</p><p> 圖6.4 循環(huán)方式選舉大王</p><p> 6.3 結(jié)束界面(如下圖)</p><p><b> 圖6.5 結(jié)束界面</b></p><
100、;p><b> 結(jié) 論</b></p><p> 在課程設(shè)計中,首先要看清問題,將問題要求理解透徹,在構(gòu)思要如何實現(xiàn),要用到哪些函數(shù),要用什么算法,在課程設(shè)計構(gòu)思中選算法是一個很重要的概念。只有確定用什么算法后才能接下來的工作,將流程圖畫在紙上,再進行代碼的編寫。在程序設(shè)計中編寫代碼只是一個方面,調(diào)試才是關(guān)鍵,它是一個相當(dāng)繁瑣的過程。有許多新的問題需要被解決,但同時它也是個比較重
101、要的過程,在調(diào)試中,你會學(xué)到很多新的東西,從而增加你編程能力和經(jīng)驗。</p><p> 通過本次實習(xí),溫固了數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,加深了對課內(nèi)所學(xué)的有關(guān)數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲表示、數(shù)據(jù)結(jié)構(gòu)的選擇合應(yīng)用、算法的設(shè)計和時空效率分析等內(nèi)容的理解,進一步熟悉了C++的應(yīng)用與編程環(huán)境,鞏固并提高了分析問題,解決問題的能力。</p><p><b> 致 謝</b></p
102、><p> 在本次課程設(shè)計過程中,首先感謝學(xué)校相關(guān)領(lǐng)導(dǎo)給了我一次提升實力的機會。其次要感謝監(jiān)督我完成該實驗的老師,是她在我需要必要幫助時,申出了援助之手。還要感謝教過我C++語言和數(shù)據(jù)結(jié)構(gòu)的各位老師,是他們的授課,讓我打下了完成該實驗的基礎(chǔ)。最后,感謝身邊的同學(xué)們、朋友們以及網(wǎng)友們,是你們給了我完成該實驗的思路、方法。</p><p><b> 參考文獻 </b>&l
103、t;/p><p> ?。?]楊寶剛.開展企業(yè)管理信息化工作的步驟[J].企業(yè)管理.2002.(11).12~15</p><p> [2]Islamabad. Software tools for forgery detection[J]. Business line.2001. (5). 29~32 </p><p> ?。?]王立柱.C/C++與數(shù)據(jù)結(jié)構(gòu).北京:清
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 猴子選大王課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---猴子選大王
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 猴子選大王+ joseph環(huán)+紙牌游戲
- “猴子選大王”實驗報告
- 課程設(shè)計說明書
- 課程設(shè)計說明書
- 前門課程設(shè)計說明書
- javaweb課程設(shè)計說明書
- 后蓋課程設(shè)計說明書
- 鍋爐課程設(shè)計說明書
- 空調(diào)課程設(shè)計說明書
- 蝸輪課程設(shè)計說明書
- 采礦課程設(shè)計說明書
- 機床課程設(shè)計說明書
- caxa課程設(shè)計說明書
- 化工課程設(shè)計說明書
- vb課程設(shè)計說明書
- 課程設(shè)計說明書.doc
- 課程設(shè)計說明書.doc
- 課程設(shè)計說明書.doc
評論
0/150
提交評論