版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì)</p><p><b> 學(xué)生跳舞搭配</b></p><p> 課程設(shè)計(jì)名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) </p><p> 專 業(yè) 班 級(jí) : </p><p> 學(xué) 生 姓 名 : </p&g
2、t;<p> 學(xué) 號(hào) : </p><p> 指 導(dǎo) 教 師 : </p><p> 課程設(shè)計(jì)時(shí)間: </p><p> 計(jì)算機(jī)應(yīng)用技術(shù) 專業(yè)課程設(shè)計(jì)任務(wù)書</p><p><b> 需求分
3、析:</b></p><p><b> 設(shè)計(jì)內(nèi)容</b></p><p> 一班有m個(gè)女生,有n個(gè)男生(m不等于n),現(xiàn)要開一個(gè)舞會(huì). 男女生分別編號(hào)坐在舞池的兩邊的椅子上.每曲開始時(shí),依次從男生和女生中各出一人配對(duì)跳舞, 本曲沒成功配對(duì)者坐著等待下一曲找舞伴.</p><p> 請(qǐng)?jiān)O(shè)計(jì)一系統(tǒng)模擬動(dòng)態(tài)地顯示出上述過程,要求如下
4、:</p><p> 1) 輸出每曲配對(duì)情況</p><p> 2) 計(jì)算出任何一個(gè)男生(編號(hào)為X)和任意女生(編號(hào)為Y),在第K曲配對(duì)跳舞的 情況.至少求出K的兩個(gè)值.</p><p> 3) 盡量設(shè)計(jì)出多種算法及程序,可視情況適當(dāng)加分</p><p><b> 2.需求</b></p><
5、p> 本課題要對(duì)數(shù)目不等的男生女生跳舞進(jìn)行搭配,設(shè)計(jì)需要解決每一首曲子 </p><p> 男生女生的搭配情況,要采用循環(huán)隊(duì)列的模式來解決,男生和女生各在兩個(gè)循環(huán)
6、</p><p> 的隊(duì)列中,每首曲子開始,便在兩個(gè)隊(duì)首各取一人成功配對(duì)跳舞,并進(jìn)入隊(duì)尾, </p><p><b> 等待下一次配對(duì)。</b></p><p> 例如:(3男5女情況) </p><p><b> 第一首:男1和女1</b></p>&
7、lt;p><b> 第二首:男2和女2</b></p><p><b> .........</b></p><p><b> 第四首:男1和女4</b></p><p><b> 二 概要設(shè)計(jì)</b></p><p> 1.各模塊函數(shù)介
8、紹:</p><p> 1)class cirularQueue </p><p> 作用:定義一個(gè)一個(gè)循環(huán)隊(duì)列</p><p> 2)~cirularQueue() </p><p> 作用:定義析構(gòu)函數(shù),使對(duì)象在撤銷時(shí)釋放</p><p> 3)bool IsFull() </p>
9、;<p> 作用:判斷隊(duì)列是否已滿</p><p> 4)bool IsEmpty() </p><p> 作用:判斷隊(duì)列是否為空,用于出隊(duì)列前使用</p><p> 5)void push(T info) </p><p> 作用:入隊(duì)。每對(duì)舞伴跳完舞之后,做入隊(duì)處理,到達(dá)隊(duì)尾,等待下次跳舞。</p&
10、gt;<p> 6)void Pop(T &info) </p><p> 作用:出隊(duì)。每取曲子響起時(shí)男生隊(duì)列和女生隊(duì)列作出隊(duì)處理,兩人跳舞。</p><p> 7)void GetHead(T &info) </p><p> 作用:取隊(duì)首元素,對(duì)出隊(duì)的男女進(jìn)行識(shí)別。</p><p> 8)voi
11、d Initqueue(cirularQueue<int>&,int);</p><p><b> 作用:初始化隊(duì)列</b></p><p> 9)void display(int,int);</p><p> 作用:根據(jù)男生和女生的人數(shù)和曲目的數(shù)目,來判斷每曲歌的男女配對(duì)情況</p><p>
12、 10)void charge(int,int);</p><p> 作用:判斷指定組合能否配對(duì)成功</p><p> 本程序包含三個(gè)模塊:</p><p><b> 1)主程序模塊:</b></p><p> void main()</p><p><b> {</b
13、></p><p><b> 初始化;</b></p><p><b> do{</b></p><p><b> 接受命令;</b></p><p><b> 處理命令;</b></p><p> }while(“
14、命令”=”退出”) </p><p><b> }</b></p><p> 2)集合單元模塊——實(shí)現(xiàn)集合的各個(gè)函數(shù)模塊</p><p> 3)結(jié)點(diǎn)結(jié)構(gòu)單元模塊——定義集合的結(jié)點(diǎn)結(jié)構(gòu)</p><p><b> 3主函數(shù)調(diào)用關(guān)系圖</b></p><p><b&g
15、t; 圖main()</b></p><p><b> 4初始化示意 </b></p><p><b> 否</b></p><p> 圖void Initqueue(cirularQueue<int> &Q,int m)</p><p> 5 每曲配對(duì)函
16、數(shù)調(diào)用關(guān)系圖void display(int,int)</p><p><b> 否</b></p><p> 是 </p><p> 圖void display(int,int)</p><p> 6 第k曲配對(duì)函數(shù)調(diào)用圖void charge(int,
17、int)</p><p> 圖void charge(int,int)</p><p> 7 隊(duì)滿判斷bool IsFull()</p><p> 8 對(duì)空判斷原則bool IsEmpty()</p><p> 9 入隊(duì)流程void push(T info)</p><p> 10出隊(duì)流程void Pop(T
18、 &info)</p><p> 11取隊(duì)首元素代碼void GetHead(T &info)</p><p><b> 3.運(yùn)行環(huán)境</b></p><p><b> 軟件環(huán)境</b></p><p> 操作系統(tǒng):Windows7</p><p>&
19、lt;b> 硬件環(huán)境</b></p><p> 處理器:Intel Pentium 166MX 或更高</p><p><b> 內(nèi)存:32MB以上</b></p><p> 硬盤空間:1GB以上</p><p> 顯卡:SVGA 顯示適配</p><p> 4 開發(fā)
20、工具和編程語(yǔ)言</p><p> Microsoft visual C++</p><p><b> C語(yǔ)言</b></p><p><b> 5 詳細(xì)設(shè)計(jì)</b></p><p> #include<iostream></p><p> #includ
21、e<stdio.h></p><p> template <class T></p><p> class cirularQueue //定義一個(gè)一個(gè)循環(huán)隊(duì)列</p><p> { private:</p><p> int MaxSize;</p><p> int front;
22、 //頭指針</p><p> int rear; //尾指針</p><p><b> T *data;</b></p><p><b> public:</b></p><p> cirularQueue(int MaxLength)</p><p>
23、 { MaxSize=MaxLength;</p><p> front=rear=0;</p><p> data=new T[MaxLength];</p><p><b> }</b></p><p> ~cirularQueue() //定義析構(gòu)函數(shù),使對(duì)象在撤銷時(shí)釋放</p><
24、;p> { front=rear=0;</p><p> delete []data;</p><p><b> }</b></p><p> void Initqueue() //隊(duì)列的申明</p><p> { for(int i=0;i<maxSize-1;i++)</p>
25、;<p><b> push(i);</b></p><p><b> }</b></p><p> bool IsFull() //判斷隊(duì)列是否已滿 </p><p> { if((rear+1)%MaxSize==front)</p><p> return
26、 true;</p><p> else return false; </p><p><b> }</b></p><p> bool IsEmpty() //判斷隊(duì)列是否為空</p><p> { if(front==rear)</p><p> return tru
27、e;</p><p> else return false;</p><p><b> }</b></p><p> void push(T info) //入隊(duì)</p><p> { if(IsFull())</p><p> { printf("錯(cuò)誤!隊(duì)列已
28、滿!");</p><p><b> exit(-1);</b></p><p><b> }</b></p><p><b> else</b></p><p> { data[rear]=info;</p><p> rear=
29、(rear+1)%MaxSize;</p><p><b> }</b></p><p><b> }</b></p><p> void Pop(T &info) //出隊(duì)</p><p> { if(IsEmpty())</p><p> {
30、 printf("錯(cuò)誤!隊(duì)列為空!");</p><p><b> exit(-1);</b></p><p><b> }</b></p><p><b> else</b></p><p> { info=data[front];</p&
31、gt;<p> front=(front+1)%MaxSize;</p><p><b> }</b></p><p><b> }</b></p><p> void GetHead(T &info) //取隊(duì)首元素</p><p> { if(IsEmp
32、ty())</p><p> { printf("錯(cuò)誤!隊(duì)列為空!");</p><p> exit (-1);</p><p><b> }</b></p><p><b> else</b></p><p> { info=data[
33、front];</p><p><b> }</b></p><p><b> }</b></p><p><b> };</b></p><p> void Initqueue(cirularQueue<int>&,int);</p>
34、<p> void display(int,int);</p><p> void charge(int,int);</p><p> using namespace std;</p><p> static int songnum=0; //定義歌曲的數(shù)量并初始化為0</p><p> static int m=0,
35、n=0; //男生和女生的人數(shù) </p><p> int main() //主函數(shù)</p><p> { printf("請(qǐng)分別輸入男生和女生的人數(shù):");</p><p> scanf(“%d%d”,&m,&n);</p><p> display(m,n);&
36、lt;/p><p> int a=0,b=0; //男生和女生的編號(hào),以判斷他們?cè)诘趲资赘钑r(shí)能在一起跳舞</p><p> char quit='y'; //判斷是否繼續(xù)輸入,如果繼續(xù)輸入,則輸入'y';否則輸入'n'</p><p> while(quit!='n')</p>
37、;<p> { printf("請(qǐng)輸入男生和女生的編號(hào):");</p><p> scanf(“%d%d”,&a,&b);</p><p> while((a>m)||(b>n)) //如果輸入錯(cuò)誤</p><p> { printf("輸入的編號(hào)過大,請(qǐng)重新輸入:")
38、;</p><p> scanf(“%d%d”,&a,&b);</p><p><b> } </b></p><p> charge(a,b);</p><p> printf("是否繼續(xù)(是請(qǐng)輸入'y',否則請(qǐng)輸入'n'):");</
39、p><p> scanf(“%c”,quit);</p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> void Initqueue(cirularQue
40、ue<int> &Q,int m) //初始化隊(duì)列</p><p> { for(int i=1;i<=m;i++)</p><p> Q.push(i);</p><p><b> }</b></p><p> void display(int m,int n)</p&
41、gt;<p> { cirularQueue<int> man(m+1);</p><p> cirularQueue<int> woman(n+1);</p><p> Initqueue(man,m);</p><p> Initqueue(woman,n);</p><p> Print
42、f("請(qǐng)輸入曲目數(shù):");</p><p> scanf(“%d”,songnum);</p><p> printf("每曲的配對(duì)情況為:");</p><p> for(int k=1;k<=songnum;k++)</p><p> { int x=0,y=0; //男生和女生
43、的編號(hào)</p><p> man.Pop(x); //男生按順序出對(duì)跳舞</p><p> woman.Pop(y); //女生按順序出對(duì)跳舞</p><p> printf("第%d曲: %d號(hào)男生<->%d號(hào)女生",songnum,a,b); //他們?cè)谝黄鹛?lt;/p><p>
44、 man.push(x); //跳完舞后男生再次進(jìn)入隊(duì)列等在下一次跳舞</p><p> woman.push(y); //跳完舞后男生再次進(jìn)入隊(duì)列等在下一次跳舞</p><p><b> }</b></p><p><b> }</b></p><p> void charge(
45、int a,int b)</p><p> { int count=0; //定義舞曲計(jì)數(shù)以記錄他們能在第幾曲時(shí)在一起跳舞</p><p> cirularQueue<int> man1(m+1);</p><p> cirularQueue<int> woman1(n+1);</p><p> Initqu
46、eue(man1,m);</p><p> Initqueue(woman1,n);</p><p> while(count<=songnum)</p><p> { int x, y;</p><p><b> count++;</b></p><p> man1.Pop(x
47、);</p><p> woman1.Pop(y);</p><p> man1.push(x);</p><p> woman1.push(y);</p><p> if((x==a)&&(y==b)) </p><p> { printf"第%d首曲: %d號(hào)男生<
48、->%d號(hào)女生",songnum,a,b};</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //如果他們?cè)谶@個(gè)舞會(huì)上不能在一起跳舞,則輸出</p>
49、<p> if(count==songnum+1)</p><p> printf("他們?cè)谶@個(gè)舞會(huì)上不可能在一起跳舞");</p><p><b> }</b></p><p><b> 6 調(diào)試分析</b></p><p><b> 測(cè)試中的
50、問題舉例:</b></p><p> 在測(cè)試刪除聯(lián)系人函數(shù)時(shí)發(fā)現(xiàn)無論通訊錄中現(xiàn)存多少條記錄只要?jiǎng)h除一條之后,通訊錄就會(huì)被清空,經(jīng)過檢查發(fā)現(xiàn)是刪除函數(shù)中的條件控制設(shè)置有錯(cuò),導(dǎo)致只要一刪除一個(gè)聯(lián)系人就會(huì)事頭結(jié)點(diǎn)與尾結(jié)點(diǎn)指向同一個(gè),導(dǎo)致再顯示聯(lián)系人時(shí)顯示無聯(lián)系人。經(jīng)過調(diào)整已處理好。</p><p><b> 算法改進(jìn)設(shè)想舉例:</b></p>
51、<p> 程序中還有很多地方不能很好的模擬通訊錄的功能,比如在增肌聯(lián)系人時(shí),不管原來新聯(lián)系人姓名是否已存在,都會(huì)被加入通訊錄,這樣一來就有可能重復(fù)記錄。此外在查找聯(lián)系人時(shí)只要查找到一個(gè)合法記錄就會(huì)中斷查找操作,如此有可能導(dǎo)致記錄的漏查。結(jié)合以上兩點(diǎn)應(yīng)優(yōu)化增加查找聯(lián)系人算法,在存入之間進(jìn)行防重判斷。</p><p><b> 測(cè)試結(jié)果</b></p><p&g
52、t;<b> 參考文獻(xiàn)</b></p><p> [1]嚴(yán)蔚敏,《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)》 清華大學(xué)出版社</p><p> [2]譚浩強(qiáng).《C語(yǔ)言程序設(shè)計(jì)》(第三版) 清華大學(xué)出版社</p><p><b> 心得體會(huì)</b></p><p> 本設(shè)計(jì)采用的是循環(huán)隊(duì)列的基本操作順利的
53、解決學(xué)生舞曲搭配問題,主要利用用循環(huán)隊(duì)列的環(huán)狀結(jié)構(gòu),采用指針的移動(dòng)大大加快了程序的執(zhí)行效率。</p><p> 通過這次實(shí)驗(yàn),我發(fā)現(xiàn)自己在數(shù)據(jù)結(jié)構(gòu)這方面真是知之甚少,以前學(xué)習(xí)的知識(shí)也多有遺忘。與其說這是一次學(xué)習(xí),倒不如說這是一次檢測(cè)。所以,這次實(shí)驗(yàn)讓我很好的認(rèn)清自己對(duì)數(shù)據(jù)結(jié)構(gòu)這門課學(xué)習(xí)程度如何,知道自己哪些方面還存在不足、對(duì)該學(xué)科重視程度還不夠,以后要努力學(xué)習(xí)。對(duì)一學(xué)期的學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)通過這次實(shí)訓(xùn),雖然并沒有掌
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跳舞搭配問題課程設(shè)計(jì)報(bào)告
- 學(xué)生考勤系統(tǒng)c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)
- 【課程設(shè)計(jì)】c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)-學(xué)生綜合測(cè)評(píng)系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理
- c語(yǔ)言課程設(shè)計(jì)學(xué)生綜合測(cè)評(píng)系統(tǒng)
- c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--- 學(xué)生成績(jī)管理
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生信息管理
- c語(yǔ)言學(xué)生選課系統(tǒng)課程設(shè)計(jì)
- c_語(yǔ)言課程設(shè)計(jì)---學(xué)生選課系統(tǒng)
- c語(yǔ)言學(xué)生管理系統(tǒng)課程設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生通信錄設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)--c語(yǔ)言投票程序
- c語(yǔ)言課程設(shè)計(jì)課程報(bào)
- c語(yǔ)言課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論