版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p> 題 目: 學(xué)生搭配問題 </p><p> 學(xué) 院: </p><p> 班 級: </p><p> 學(xué)
2、生 姓 名: </p><p> 學(xué) 生 學(xué) 號: </p><p> 指 導(dǎo) 教 師: </p><p> 2012 年 12 月 3 日</p><p><b> 課程設(shè)計任務(wù)書</b>&l
3、t;/p><p><b> 摘 要</b></p><p> 針對學(xué)生搭配問題,循環(huán)隊列是一種重要的鏈?zhǔn)浇Y(jié)構(gòu),其特殊性在于需附設(shè)兩個指針front和rear分別指示對頭元素及隊尾元素的位置且對頭和隊尾相鄰接。在程序的設(shè)計過程中,運用了各種基本的算法,有判斷隊空及隊滿,出隊,入隊等.循環(huán)隊列是在隊列的順序存儲結(jié)構(gòu)中,除了用乙組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的
4、元素外,尚需附設(shè)兩個指針front和rear分別指示隊列頭元素和隊列尾元素的位置。學(xué)生搭配問題是典型的只有采用循環(huán)隊列才能解決的問題,實驗表明該算法的空間復(fù)雜度優(yōu)于其他算法。</p><p> 本文用循環(huán)隊列會很好的把這個程序設(shè)計出來,會有很好的效果。得出的程序運行結(jié)果能夠很形象的把結(jié)果表示出來。</p><p> 關(guān)鍵詞:學(xué)生配對,數(shù)據(jù)結(jié)構(gòu),循環(huán)隊列。 </p>&l
5、t;p><b> 目錄</b></p><p><b> 摘要I</b></p><p><b> 1 設(shè)計題目1</b></p><p><b> 2 運行環(huán)境1</b></p><p> 3 算法設(shè)計的思想1</p>
6、<p> 4 算法的流程圖2</p><p> 5 算法設(shè)計分析2</p><p><b> 6 源代碼3</b></p><p> 7 運行結(jié)果分析8</p><p><b> 8 收獲及體會8</b></p><p><b>
7、 參考文獻9</b></p><p><b> 致謝9</b></p><p><b> 學(xué)生搭配問題</b></p><p><b> 1.設(shè)計題目</b></p><p> 一班有m個女生,有n個男生(m不等于n),現(xiàn)要開一個舞會. 男女生分別編號坐
8、在舞池的兩邊的椅子上.每曲開始時,依次從男生和女生中各出一人配對跳舞, 本曲沒成功配對者坐著等待下一曲找舞伴。請設(shè)計一系統(tǒng)模擬動態(tài)地顯示出上述過程,要求如下:</p><p> (1)輸出每曲配對情況</p><p> (2)計算出任何一個男生(編號為X)和任意女生(編號為Y),在第K曲配對跳舞的情況.至少求出K的兩個值。</p><p><b>
9、2.運行環(huán)境</b></p><p> 本課題的程序設(shè)計和測試等環(huán)節(jié)都是在Windows7操作系統(tǒng)下完成,軟件的編譯測試環(huán)境為vc6.0 以c語言編寫的。軟件的硬件運行需求非常低,任何計算機都可運行。</p><p><b> 3.算法設(shè)計的思想</b></p><p> 基本思路:隊列(Queue)是只允許在一端進行插入,而
10、在另一端進行刪除的運算受限的線性表。</p><p> 循環(huán)隊列是在隊列的順序存儲結(jié)構(gòu)中,除了用乙組地址連續(xù)的存儲單元依次存放從隊列頭到隊列尾的元素外,尚需附設(shè)兩個指針front和rear分別指示隊列頭元素和隊列尾元素的位置。</p><p> 循環(huán)隊列(兩個),將男生、女生兩組人分別存放,以實現(xiàn)循環(huán)配對輸出。循環(huán)隊列的入隊,出隊,判隊滿,判隊空。</p><p&g
11、t; ?。?) 要模擬動態(tài)地顯示出現(xiàn)題目中所要求的循環(huán),我們要先建立兩個循環(huán)隊列SqQueue和SqQueue2。</p><p> ?。?) 將男生、女生兩組人分別存入這兩個隊列。以實現(xiàn)他們的循環(huán)配對輸出,這是循環(huán)隊列固有的特性。</p><p> ?。?) 利用循環(huán)隊列的特性,將男女生分別進行入隊列和出隊列操作,且實現(xiàn)搭配輸出。</p><p> ?。?) 循環(huán)
12、隊列的長度分別設(shè)為男女生的個數(shù)即可。</p><p> ?。?) 在計算機終端輸出的結(jié)果是:根據(jù)要求輸出男生女生搭配情況 </p><p> 關(guān)鍵問題: 循環(huán)隊列的應(yīng)用</p><p> 解決方法:數(shù)據(jù)模型(邏輯結(jié)構(gòu)): 循環(huán)隊列(兩個),將男生、女生兩組人分別存放,以實現(xiàn)循環(huán)配對輸出。</p><p> 存儲結(jié)構(gòu): 循環(huán)鏈表<
13、/p><p> 核心算法: 循環(huán)隊列的入隊,出隊,判隊滿,判隊空。</p><p> 輸入數(shù)據(jù): 男生人數(shù)、女生人數(shù),歌曲數(shù)量</p><p> 輸出數(shù)據(jù): 每一首歌曲播放時,男生和女生搭配情況(只輸出編號即可)當(dāng)要查找的男女搭配時輸出歌曲編號,和他們搭配的總次數(shù)。通過以上分析,該程序具有可行性。 </p><p><b>
14、; 4.算法的流程圖</b></p><p><b> 5.算法設(shè)計分析</b></p><p> 調(diào)試過程中出現(xiàn)的問題及解決方法:</p><p> 問題:在構(gòu)造隊列時,設(shè)隊列分配的最大空間為男女生的個數(shù),此時便無法根據(jù)Q.front=Q.rear來判別隊列空間是“空”還是“滿”,因此,在入隊操作即插入一個新元素作為新的隊
15、尾元素時出現(xiàn)了問題,即最后一位同學(xué)無法入隊。</p><p> 解決方法:將隊列分配的最大空間至少再增加一個</p><p><b> 6.源代碼</b></p><p> #include <string.h></p><p> #include<stdio.h></p>
16、<p> #include <time.h></p><p> #include <malloc.h></p><p> #define MAXSIZE 60</p><p> #define TRUE 1 </p><p> #define FALSE 0</p><p>
17、 #define OK 1</p><p> #define ERROR 0</p><p> #define OVERFLOW -1</p><p> //typedef int system;</p><p> typedef struct QNode{ </p><p><b> int n
18、um;</b></p><p> struct QNode *next;</p><p> }QNode,* QueuePtr;</p><p> typedef struct{</p><p> QueuePtr front;</p><p> QueuePtr rear;</p>
19、<p> }LinkQueue;</p><p> void sleep( clock_t wait ) </p><p><b> { </b></p><p> clock_t goal; </p><p> goal = wait + clock(); </p><p>
20、; while( goal > clock() ) ; </p><p><b> }</b></p><p> void InitQ(LinkQueue &Q) </p><p><b> {</b></p><p> QueuePtr p; </p><
21、;p> p=(QueuePtr)malloc(sizeof(QNode));</p><p> Q.front=p;</p><p><b> Q.rear=p;</b></p><p> Q.front->next=NULL;</p><p><b> }</b></p
22、><p> void EnQueue(LinkQueue &Q,int num)</p><p><b> {</b></p><p> QueuePtr p; </p><p> p=(QueuePtr)malloc(sizeof(QNode));</p><p> p->n
23、um=num;</p><p> p->next=NULL;</p><p> Q.rear->next=p;</p><p><b> Q.rear=p;</b></p><p><b> }</b></p><p> void DeQueue(Lin
24、kQueue &Q, int &num)</p><p><b> {</b></p><p> QueuePtr p,q; </p><p> if(Q.front==Q.rear)</p><p> printf("隊列為空");</p><p>
25、 p=Q.front->next;</p><p> num=p->num;</p><p> Q.front->next=p->next;</p><p> q=p->next;</p><p> if(Q.rear==q)</p><p> Q.rear=Q.front;&l
26、t;/p><p><b> free(p);</b></p><p><b> }</b></p><p> void printF(LinkQueue &F,int i) </p><p><b> {</b></p><p> Queu
27、ePtr p; </p><p><b> int n=1;</b></p><p> while(n<i)</p><p><b> {</b></p><p> printf("_ ");</p><p><b> n++;
28、</b></p><p><b> }</b></p><p> p=F.front->next;</p><p> while(F.rear!=p)</p><p><b> { </b></p><p> printf("%d &qu
29、ot;,p->num);</p><p> p=p->next;}</p><p> printf("%d \n",p->num);</p><p><b> }</b></p><p> void printM(LinkQueue &M,int i) </p&
30、gt;<p><b> {</b></p><p> QueuePtr p;</p><p><b> int n=1;</b></p><p> while(n<i)</p><p><b> {</b></p><p>
31、 printf("_ ");</p><p><b> n++;</b></p><p><b> }</b></p><p> p=M.front->next;</p><p> while(M.rear!=p)</p><p><
32、b> { </b></p><p> printf("%d ",p->num);</p><p> p=p->next;</p><p><b> }</b></p><p> printf("%d \n",p->num);</p
33、><p><b> }</b></p><p> int main()</p><p><b> { </b></p><p> int m,n,k,i,a,b;</p><p> int count=0,num;</p><p> Queue
34、Ptr p,q;</p><p> LinkQueue F;</p><p> LinkQueue M;</p><p> printf("請輸入女生數(shù)量:");</p><p> scanf("%d",&m);</p><p> printf("請
35、輸入男生數(shù)量:");</p><p> scanf("%d",&n);</p><p> printf("請輸曲子號:");</p><p> scanf("%d",&k);</p><p> printf("請輸入要查找的男生編號:&qu
36、ot;);</p><p> scanf("%d",&a);</p><p> printf("請輸入要查找的女生編號:");</p><p> scanf("%d",&b);</p><p><b> InitQ(F);</b><
37、/p><p><b> InitQ(M);</b></p><p> for(i=1;i<=m;i++)</p><p><b> {</b></p><p> EnQueue(F,i);</p><p><b> }</b></p&g
38、t;<p> for(i=1;i<=n;i++)</p><p><b> {</b></p><p> EnQueue(M,i);</p><p><b> }</b></p><p> for(i=1;i<=k;i++)</p><p>
39、;<b> {</b></p><p> system("CLS"); </p><p> printf("第%d首曲子 \n",i);</p><p> printF(F,i);</p><p> printM(M,i);</p><p> p
40、=F.front->next;</p><p> q=M.front->next;</p><p> printf("目前跳舞的是第%d號女生和第%d號男生\n",p->num,q->num);</p><p> if(p->num==a&&q->num==b)</p>&l
41、t;p><b> {</b></p><p><b> count++;</b></p><p> printf("第%d曲是要查找的男女生跳舞\n",i);</p><p><b> }</b></p><p> sleep(3000);&
42、lt;/p><p> DeQueue(F,num);</p><p> EnQueue(F,num);</p><p> DeQueue(M,num);</p><p> EnQueue(M,num); </p><p><b> }</b></p><p> pr
43、intf("該對男女生共跳舞%d次\n",count);</p><p> system("PAUSE");</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 7.運行結(jié)果分
44、析</b></p><p><b> 測試及運行結(jié)果</b></p><p> 測試輸入數(shù)據(jù):男女生的個數(shù)曲子數(shù)和要查找的男女生編號</p><p> 輸出結(jié)果為:每首曲子男女生搭配的情況</p><p><b> 程序運行界面:</b></p><p>
45、<b> 8.收獲及體會</b></p><p> 通過一周的學(xué)習(xí)和實踐,解決實際問題(學(xué)生搭配問題),讓我對循環(huán)隊列有了更深的了解,對數(shù)據(jù)結(jié)構(gòu)產(chǎn)生了濃厚的興趣,同時也讓我提高了解決實際問題的能力。</p><p> 我們要不斷的通過上機來提高自己的學(xué)習(xí)水平,在上機的同時改正了自己對某些算法的錯誤使用,使自己在通過程序解決問題時抓住關(guān)鍵算法,有了算法設(shè)計思想和流
46、程圖,并用C語言描繪出關(guān)鍵算法。</p><p><b> 參考文獻</b></p><p> [1] 數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴蔚敏 吳偉明 編著,清華大學(xué)出版社</p><p> [2] C語言程序設(shè)計(第三版)譚浩強 著,清華大學(xué)出版社</p><p><b> 致謝</b></p&
47、gt;<p> 首先,我要感謝學(xué)校給我們提供了此次課程設(shè)計的機會,能讓同學(xué)們在一起學(xué)習(xí)與研究,讓我們有機會對所學(xué)的理論知識進行實踐。</p><p> 其次,我還要特別感謝我的輔導(dǎo)老師張?zhí)l(fā)老師,在他的精心輔導(dǎo)和幫助下,我的設(shè)計才得以順利完成,并使所學(xué)知識得以真正的應(yīng)用。對他為我的設(shè)計所提出的寶貴意見表示忠心的感謝!</p><p> 最后,在設(shè)計過程中,也得到了許多同
溫馨提示
- 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ù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生搭配問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(迷宮問題)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---學(xué)生成績管理問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)迷宮問題課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---迷宮問題
- 課程設(shè)計——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(八皇后問題)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計--學(xué)生管理系統(tǒng)
- 迷宮問題——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(八皇后問題)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---校園導(dǎo)航問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
評論
0/150
提交評論