數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-學(xué)生搭配問(wèn)題_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-學(xué)生搭配問(wèn)題_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-學(xué)生搭配問(wèn)題_第3頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)題目:學(xué)生搭配問(wèn)題學(xué)院:班級(jí):學(xué)生姓名:學(xué)生學(xué)號(hào):指導(dǎo)教師:2012 年12月3日課程設(shè)計(jì)任務(wù)書姓名班級(jí)學(xué)號(hào)設(shè)計(jì)題目學(xué)生搭配問(wèn)題理論要點(diǎn)隊(duì)列(Queue是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除 的運(yùn)算受限的線性表。循環(huán)隊(duì)列是在隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)中,除了用 乙組地址連續(xù)的存儲(chǔ)單元依次存放從隊(duì)列頭到隊(duì)列尾的元素外,尚需附設(shè)兩個(gè)指針front和rear分別指示隊(duì)列頭元素和隊(duì)列尾元素的位 置。循環(huán)隊(duì)列的入隊(duì),出隊(duì),判隊(duì)滿,判隊(duì)空。設(shè)計(jì)目標(biāo)(1)輸出每曲配對(duì)情況。(2)計(jì)算出任何一個(gè)男生(編號(hào)為X)和任意女生(編號(hào)為丫),在第K 曲配對(duì)跳舞的情況.至少求出K的兩個(gè)值。研究方法 步驟(1

2、)先建立兩個(gè)循環(huán)隊(duì)列 SqQueue和 SqQueue2(2)將男生、女生兩組人分別存入這兩個(gè)隊(duì)列。(3)將男女生分別進(jìn)行入隊(duì)列和出隊(duì)列操作,且實(shí)現(xiàn)搭配輸出。(4)循環(huán)隊(duì)列的長(zhǎng)度分別設(shè)為男女生的個(gè)數(shù)即可。(5)在計(jì)算機(jī)終端輸出的結(jié)果是:根據(jù)要求輸出男生女生搭配情況。預(yù)期結(jié)果每一首歌曲播放時(shí),男生和女生搭配情況(只輸出編號(hào)即可)當(dāng) 要查找的男女搭配時(shí)輸出歌曲編號(hào), 和他們搭配的總次數(shù)。通過(guò)以上 分析,該程序具有可行。計(jì)劃與進(jìn) 步的安排1、2012年11月20日之前尋找到解決問(wèn)題思搭配問(wèn)題的路2、2012年11月25日之前必須編寫出程序3、2012年11月26日之前檢查程序的運(yùn)行并找出錯(cuò)誤程序4、

3、2012年11月29日之前找到解決錯(cuò)誤的方法5、2012年11月30日寫數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告摘要針對(duì)學(xué)生搭配問(wèn)題,循環(huán)隊(duì)列是一種重要的鏈?zhǔn)浇Y(jié)構(gòu),其特殊性在于需附設(shè) 兩個(gè)指針 front 和 rear 分別指示對(duì)頭元素及隊(duì)尾元素的位置且對(duì)頭和隊(duì)尾相鄰 接。在程序的設(shè)計(jì)過(guò)程中,運(yùn)用了各種基本的算法,有判斷隊(duì)空及隊(duì)滿,出隊(duì), 入隊(duì)等. 循環(huán)隊(duì)列是在隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)中,除了用乙組地址連續(xù)的存儲(chǔ)單元 依次存放從隊(duì)列頭到隊(duì)列尾的元素外,尚需附設(shè)兩個(gè)指針 front 和 rear 分別指 示隊(duì)列頭元素和隊(duì)列尾元素的位置。 學(xué)生搭配問(wèn)題是典型的只有采用循環(huán)隊(duì)列才 能解決的問(wèn)題,實(shí)驗(yàn)表明該算法的空間復(fù)雜度優(yōu)于

4、其他算法。 本文用循環(huán)隊(duì)列會(huì)很好的把這個(gè)程序設(shè)計(jì)出來(lái), 會(huì)有很好的效果。 得出的程 序運(yùn)行結(jié)果能夠很形象的把結(jié)果表示出來(lái)。關(guān)鍵詞:學(xué)生配對(duì),數(shù)據(jù)結(jié)構(gòu),循環(huán)隊(duì)列。摘要 1 設(shè)計(jì)題目 目錄錯(cuò)誤! 未定義書簽錯(cuò)誤! 未定義書簽2 運(yùn)行環(huán)境 13 算法設(shè)計(jì)的思想 14 算法的流程圖 25 算法設(shè)計(jì)分析 26 源代碼 37 運(yùn)行結(jié)果分析 88 收獲及體會(huì) 8參考文獻(xiàn) 9致謝 9學(xué)生搭配問(wèn)題1. 設(shè)計(jì)題目一班有m個(gè)女生,有n個(gè)男生(m不等于n),現(xiàn)要開(kāi)一個(gè)舞會(huì).男女生分別編 號(hào)坐在舞池的兩邊的椅子上 . 每曲開(kāi)始時(shí) , 依次從男生和女生中各出一人配對(duì)跳 舞, 本曲沒(méi)成功配對(duì)者坐著等待下一曲找舞伴。 請(qǐng)?jiān)O(shè)計(jì)

5、一系統(tǒng)模擬動(dòng)態(tài)地顯示出 上述過(guò)程,要求如下:(1)輸出每曲配對(duì)情況(2)計(jì)算出任何一個(gè)男生(編號(hào)為X)和任意女生(編號(hào)為丫),在第K曲配對(duì)跳 舞的情況.至少求出K的兩個(gè)值。2. 運(yùn)行環(huán)境本課題的程序設(shè)計(jì)和測(cè)試等環(huán)節(jié)都是在 Win dows7操作系統(tǒng)下完成,軟件的 編譯測(cè)試環(huán)境為 vc6.0 以 c 語(yǔ)言編寫的。軟件的硬件運(yùn)行需求非常低,任何計(jì) 算機(jī)都可運(yùn)行。3. 算法設(shè)計(jì)的思想基本思路:隊(duì)列(Queue是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除 的運(yùn)算受限的線性表。循環(huán)隊(duì)列是在隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)中, 除了用乙組地址連續(xù)的存儲(chǔ)單元依次 存放從隊(duì)列頭到隊(duì)列尾的元素外,尚需附設(shè)兩個(gè)指針 front

6、和 rear 分別指示隊(duì) 列頭元素和隊(duì)列尾元素的位置。循環(huán)隊(duì)列(兩個(gè)),將男生、女生兩組人分別存放,以實(shí)現(xiàn)循環(huán)配對(duì)輸出。 循環(huán)隊(duì)列的入隊(duì),出隊(duì),判隊(duì)滿,判隊(duì)空。(1) 要模擬動(dòng)態(tài)地顯示出現(xiàn)題目中所要求的循環(huán),我們要先建立兩個(gè)循環(huán) 隊(duì)列 SqQueue和 SqQueue2(2)將男生、女生兩組人分別存入這兩個(gè)隊(duì)列。以實(shí)現(xiàn)他們的循環(huán)配對(duì)輸 出,這是循環(huán)隊(duì)列固有的特性。(3)利用循環(huán)隊(duì)列的特性,將男女生分別進(jìn)行入隊(duì)列和出隊(duì)列操作,且實(shí) 現(xiàn)搭配輸出。(4)循環(huán)隊(duì)列的長(zhǎng)度分別設(shè)為男女生的個(gè)數(shù)即可。(5)在計(jì)算機(jī)終端輸出的結(jié)果是:根據(jù)要求輸出男生女生搭配情況 關(guān)鍵問(wèn)題 : 循環(huán)隊(duì)列的應(yīng)用解決方法:數(shù)據(jù)模型

7、(邏輯結(jié)構(gòu)) : 循環(huán)隊(duì)列(兩個(gè)),將男生、女生兩組 人分別存放,以實(shí)現(xiàn)循環(huán)配對(duì)輸出。存儲(chǔ)結(jié)構(gòu) : 循環(huán)鏈表核心算法:循環(huán)隊(duì)列的入隊(duì),出隊(duì),判隊(duì)滿,判隊(duì)空。輸入數(shù)據(jù):男生人數(shù)、女生人數(shù),歌曲數(shù)量輸出數(shù)據(jù):每一首歌曲播放時(shí),男生和女生搭配情況(只輸出編號(hào)即可)當(dāng) 要查找的男女搭配時(shí)輸出歌曲編號(hào),和他們搭配的總次數(shù)。通過(guò)以上分析,該程序具有可行性。4. 算法的流程圖5. 算法設(shè)計(jì)分析調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及解決方法:?jiǎn)栴}:在構(gòu)造隊(duì)列時(shí),設(shè)隊(duì)列分配的最大空間為男女生的個(gè)數(shù), 此時(shí)便無(wú)法 根據(jù)Q.front=Q.rear來(lái)判別隊(duì)列空間是“空”還是“滿”,因此,在入隊(duì)操作即 插入一個(gè)新元素作為新的隊(duì)尾元素

8、時(shí)出現(xiàn)了問(wèn)題,即最后一位同學(xué)無(wú)法入隊(duì)。解決方法:將隊(duì)列分配的最大空間至少再增加一個(gè)6. 源代碼 #include <string.h> #include<stdio.h> #include <time.h> #include <malloc.h> #define MAXSIZE 60 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 /typedef int system; typedef struct QNode int num; st

9、ruct QNode *next; QNode,* QueuePtr; typedef struct QueuePtr front; QueuePtr rear; LinkQueue; void sleep( clock_t wait ) clock_t goal; goal = wait + clock(); while( goal > clock() ) ; void InitQ(LinkQueue &Q) QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);Q.front=p;Q.rear=p;Q.front->next=NULL;

10、void EnQueue(LinkQueue &Q,int num)QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode); p->num=num;p->next=NULL;Q.rear->next=p;Q.rear=p;void DeQueue(LinkQueue &Q, int &num)QueuePtr p,q;if(Q.front=Q.rear)printf(" 隊(duì)列為空 "); p=Q.front->next;num=p->num;Q.front->next=p->n

11、ext;q=p->next;if(Q.rear=q)Q.rear=Q.front;free(p);void printF(LinkQueue &F,int i)QueuePtr p;int n=1;while(n<i)printf("_ ");n+;p=F.front->next;while(F.rear!=p)printf("%d ",p->num);p=p->next;printf("%d n",p->num);void printM(LinkQueue &M,int i)Que

12、uePtr p;int n=1;while(n<i)printf("_ ");n+;p=M.front->next;while(M.rear!=p)printf("%d ",p->num);p=p->next;printf("%d n",p->num);int main()int m,n,k,i,a,b;int count=0,num;QueuePtr p,q;LinkQueue F;LinkQueue M;printf(" 請(qǐng)輸入女生數(shù)量: "); scanf("%d&qu

13、ot;,&m);printf(" 請(qǐng)輸入男生數(shù)量: ");scanf("%d",&n);printf(" 請(qǐng)輸曲子號(hào): ");scanf("%d",&k);printf(" 請(qǐng)輸入要查找的男生編號(hào): ");scanf("%d",&a);printf(" 請(qǐng)輸入要查找的女生編號(hào): ");scanf("%d",&b);InitQ(F);InitQ(M);for(i=1;i<=m;i+)EnQue

14、ue(F,i);for(i=1;i<=n;i+)EnQueue(M,i); for(i=1;i<=k;i+)system("CLS");prin tf(" 第4 首曲子 n",i); printF(F,i);printM(M,i);p=F.front->next;q=M.front->next;printf("目前跳舞的是第d號(hào)女生和第c號(hào)男生n",p->num,q->num);if(p->num=a&&q->num=b)count+;printf("第4曲是要

15、查找的男女生跳舞n",i);sleep(3000);DeQueue(F,num);EnQueue(F,num);DeQueue(M,num);EnQueue(M,num);printf("該對(duì)男女生共跳舞d次n",count);system("PAUSE");return 0;7. 運(yùn)行結(jié)果分析測(cè)試及運(yùn)行結(jié)果測(cè)試輸入數(shù)據(jù):男女生的個(gè)數(shù)曲子數(shù)和要查找的男女生編號(hào) 輸出結(jié)果為:每首曲子男女生搭配的情況程序運(yùn)行界面:C; DocuBeBts and Sett ingsX&dBin 1 st ratoiXMQTC-i-rDebugCppI

16、71; exeofrorDECS生生男女 量量k的 菱:養(yǎng) 主主£& -m 了要冇竭男生2 3 4 5 62 3 4 5前ft舞拘是穿1呂女生和第丄號(hào)男生245612 自 4 5 13 4 5 6 1 2 4512g黔澎量備;號(hào)女生和售4號(hào)男生S 6 1 2 45 12 3 4尋摯界勺是寰號(hào)女生幣誦帝號(hào)男生S 1 2 3 4 5L 2 3 4 5屠曙醪是篥6專女生和第丄號(hào)男生1 2 3 4 5 A2 3 4 5 1SW舞旳是第i弓女比和第2號(hào)男生 該動(dòng)男女掘共趾舞0次Press &nj keu to continuem 5目胃廻沸旳罡算琦女主和弟3號(hào)男生 躬首曲子4 5 6 12 38. 收獲及體會(huì)通過(guò)一周的學(xué)習(xí)和實(shí)踐,解決實(shí)際問(wèn)題(學(xué)生搭配問(wèn)題),讓我對(duì)循環(huán)隊(duì)列 有了更深的了解,對(duì)數(shù)據(jù)結(jié)構(gòu)產(chǎn)生了濃厚的興趣,同時(shí)也讓我提高了解決實(shí)際問(wèn) 題的能力。我們要不斷的通過(guò)上機(jī)來(lái)提高自己的學(xué)習(xí)水平, 在上機(jī)的同時(shí)改正了自己對(duì) 某些算法的錯(cuò)誤使用,使自己在通過(guò)程序解決問(wèn)題時(shí)抓住關(guān)鍵算法, 有了算法設(shè) 計(jì)思想和流程圖,并用C語(yǔ)言描繪出關(guān)鍵算法。參考文獻(xiàn)1 數(shù)據(jù)結(jié)構(gòu)( C 語(yǔ)言版)嚴(yán)蔚敏 吳偉明 編著,清華大學(xué)出版社2 C 語(yǔ)言程序設(shè)計(jì)(第三版)譚浩強(qiáng) 著,清華大學(xué)出版社致謝首先,我要感謝學(xué)校給我們提供了此次課程設(shè)計(jì)的機(jī)會(huì), 能讓同學(xué)們?cè)?/p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論