數(shù)據(jù)結(jié)構(gòu)課設(shè)學(xué)生搭配問(wèn)題_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課設(shè)學(xué)生搭配問(wèn)題_第2頁(yè)
已閱讀5頁(yè),還剩9頁(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、- -WORD 格式-可編輯-專業(yè)資料- - 數(shù) 據(jù) 結(jié) 構(gòu)課程設(shè)計(jì)報(bào)告書班級(jí)學(xué)號(hào)專業(yè)姓名-完整版學(xué)習(xí)資料分享需求分析:, 本曲沒(méi)成功配對(duì)者坐著,要求如下 : (編號(hào)為 X)和任意女生 (編號(hào)為 Y)需求分析:, 本曲沒(méi)成功配對(duì)者坐著,要求如下 : (編號(hào)為 X)和任意女生 (編號(hào)為 Y),在第 K 曲配對(duì)跳舞的,可視情況適當(dāng)加分總體結(jié)構(gòu)設(shè)計(jì):- 情況.至少課題描述:一、1.設(shè)計(jì)內(nèi)容一班有 m個(gè)女生 ,有n個(gè)男生 (m 不等于 n),現(xiàn)要開(kāi)一個(gè)舞會(huì) . 男女生分別編號(hào)坐在舞池的兩邊的椅子上 .每曲開(kāi)始時(shí) ,依次從男生和女生中各出一人配對(duì)跳舞等待下一曲找舞伴 . 請(qǐng)?jiān)O(shè)計(jì)一系統(tǒng)模擬動(dòng)態(tài)地顯示出上述

2、過(guò)程1) 輸出每曲配對(duì)情況2) 計(jì)算出任何一個(gè)男生求出 K 的兩個(gè)值 . 3) 盡量設(shè)計(jì)出多種算法及程序2.需求本課題要對(duì)數(shù)目不等的男生女生跳舞進(jìn)行搭配,設(shè)計(jì)需要解決每一首曲子男生女生的搭配情況,要采用循環(huán)隊(duì)列的模式來(lái)解決,男生和女生各在兩個(gè)循環(huán)的隊(duì)列中,每首曲子開(kāi)始,便在兩個(gè)隊(duì)首各取一人成功配對(duì)跳舞,并進(jìn)入隊(duì)尾,等待下一次配對(duì)。例如:(3男 5女情況)第一首:男 1和女 1 第二首:男 2和女 2 . 第四首:男 1和女 4 二、為實(shí)現(xiàn)上述功能和目的,要用到循環(huán)隊(duì)列的相關(guān)知識(shí),同時(shí),要定義一定的抽的數(shù)據(jù)類型,主函數(shù)調(diào)用各個(gè)函數(shù)模塊1.各模塊函數(shù)介紹:-完整版學(xué)習(xí)資料分享- -WORD 格式-

3、可編輯-專業(yè)資料- - 1)class cirularQueue 作用:定義一個(gè)一個(gè)循環(huán)隊(duì)列2)cirularQueue() 作用:定義析構(gòu)函數(shù),使對(duì)象在撤銷時(shí)釋放3)bool IsFull() 作用:判斷隊(duì)列是否已滿4)bool IsEmpty() 作用:判斷隊(duì)列是否為空,用于出隊(duì)列前使用5)void push(T info) 作用:入隊(duì)。每對(duì)舞伴跳完舞之后,做入隊(duì)處理,到達(dá)隊(duì)尾,等待下次跳舞。6)void Pop(T &info) 作用:出隊(duì)。每取曲子響起時(shí)男生隊(duì)列和女生隊(duì)列作出隊(duì)處理,兩人跳舞。7)void GetHead(T &info) 作用:取隊(duì)首元素,對(duì)出隊(duì)的男女進(jìn)行識(shí)別。8)v

4、oid Initqueue(cirularQueue&,int); 作用:初始化隊(duì)列9)void display(int,int); 作用:根據(jù)男生和女生的人數(shù)和曲目的數(shù)目,來(lái)判斷每曲歌的男女配對(duì)情況10)void charge(int,int); 作用:判斷指定組合能否配對(duì)成功2.本程序包含三個(gè)模塊:1)主程序模塊:void main() 初始化;do 接受命令;處理命令;while( 命“ ”=退出” ”)-完整版學(xué)習(xí)資料分享定義集合的結(jié)點(diǎn)結(jié)構(gòu)各子模塊設(shè)計(jì):每曲配對(duì)編號(hào)void void push(T info) bool IsFull() began - k 曲配對(duì)GetHead(T 輸

5、出-WORD 格式-可編輯定義集合的結(jié)點(diǎn)結(jié)構(gòu)各子模塊設(shè)計(jì):每曲配對(duì)編號(hào)void void push(T info) bool IsFull() began - k 曲配對(duì)GetHead(T 輸出 2)、集合單元模塊 實(shí)現(xiàn)集合的各個(gè)函數(shù)模塊3)、結(jié)點(diǎn)結(jié)構(gòu)單元模塊三、1主函數(shù)調(diào)用關(guān)系圖主函數(shù)數(shù)據(jù)輸入cirularQueue() class cirularQueue void Pop(T &info) IsEmpty() 圖main() 2初始化示意-完整版學(xué)習(xí)資料分享iMaxsizevoid display(int,int) man.pop(x) void charge(int,int) - -W

6、ORD 格式-可編輯-專業(yè)資料- void display(int,int) man.pop(x) void charge(int,int) - 否圖 void Initqueue(cirularQueue &Q,int m) 3每曲配對(duì)函數(shù)調(diào)用關(guān)系圖初始化男 女循環(huán)隊(duì)列k=songnum否woman.pop(y) 是輸出 k 首男 x 女 yman.push(x) woman.push(y) k+ 圖 void display(int,int) end 4第k 曲配對(duì)函數(shù)調(diào)用圖初始化 男女-完整版學(xué)習(xí)資料分享循環(huán)隊(duì)列隊(duì)列為滿bool IsEmpty() 隊(duì)列為空不能入隊(duì)- 尾指針移-WORD

7、 格式-可編輯-專業(yè)資料- 隊(duì)列為滿bool IsEmpty() 隊(duì)列為空不能入隊(duì)- 尾指針移圖 void charge(int,int) 4隊(duì)滿判斷 bool IsFull() 首尾順序相鄰5對(duì)空判斷原則首尾指針相等6入隊(duì)流程 void push(T info) 隊(duì)滿-完整版學(xué)習(xí)資料分享隊(duì)尾進(jìn)入不能出隊(duì)頭指針移void GetHead(T &info) 編程實(shí)現(xiàn):- -WORD 格式-可編輯-專業(yè)資料- 不能出隊(duì)頭指針移void GetHead(T &info) 編程實(shí)現(xiàn):- 7出隊(duì)流程 void Pop(T &info) 隊(duì)空隊(duì)頭出列8.取隊(duì)首元素代碼四、#include template

8、 class cirularQueue /定義一個(gè)一個(gè)循環(huán)隊(duì)列 private: int MaxSize; int front; /頭指針int rear; /尾指針T *data; public: cirularQueue(int MaxLength) MaxSize=MaxLength; front=rear=0; data=new TMaxLength; cirularQueue() /定義析構(gòu)函數(shù),使對(duì)象在撤銷時(shí)釋放 front=rear=0; delete data; void Initqueue() /隊(duì)列的申明 for(int i=0;imaxSize-1;i+) push(i)

9、; bool IsFull() /判斷隊(duì)列是否已滿 if(rear+1)%MaxSize=front) return true; else return false; bool IsEmpty() /判斷隊(duì)列是否為空-完整版學(xué)習(xí)資料分享0 - -WORD 格式-可編輯-專業(yè)資料- 0 - if(front=rear) return true; else return false; void push(T info) /入隊(duì) if(IsFull() cout錯(cuò)誤!隊(duì)列已滿! endl; exit(-1); else datarear=info; rear=(rear+1)%MaxSize; vo

10、id Pop(T &info) /出隊(duì) if(IsEmpty() cout錯(cuò)誤!隊(duì)列為空! endl; exit(-1); else info=datafront; front=(front+1)%MaxSize; void GetHead(T &info) /取隊(duì)首元素 if(IsEmpty() cout錯(cuò)誤!隊(duì)列為空! endl; exit (-1); else info=datafront; ; void Initqueue(cirularQueue&,int); void display(int,int); void charge(int,int); using namespace s

11、td; static int songnum=0; /定義歌曲的數(shù)量并初始化為static int m=0,n=0; /男生和女生的人數(shù)int main() /主函數(shù) coutmn; display(m,n); -完整版學(xué)習(xí)資料分享- -WORD 格式-可編輯-專業(yè)資料- - int a=0,b=0; /男生和女生的編號(hào),以判斷他們?cè)诘趲资赘钑r(shí)能在一起跳舞char quit=y; /判斷是否繼續(xù)輸入 ,如果繼續(xù)輸入,則輸入 y;否則輸入 n while(quit!=n) coutab; while(am)|(bn) /如果輸入錯(cuò)誤 coutab; charge(a,b); coutquit;

12、return 0; void Initqueue(cirularQueue &Q,int m) /初始化隊(duì)列 for(int i=1;i=m;i+) Q.push(i); void display(int m,int n) cirularQueue man(m+1); cirularQueue woman(n+1); Initqueue(man,m); Initqueue(woman,n); coutsongnum; cout每曲的配對(duì)情況為 :endl; for(int k=1;k=songnum;k+) int x=0,y=0; /男生和女生的編號(hào)man.Pop(x); /男生按順序出對(duì)跳

13、舞woman.Pop(y); /女生按順序出對(duì)跳舞cout第k 曲:tx 號(hào)男生 y 號(hào)女生 endl; /他們?cè)谝黄鹛鑝an.push(x); /跳完舞后男生再次進(jìn)入隊(duì)列等在下一次跳舞woman.push(y); /跳完舞后男生再次進(jìn)入隊(duì)列等在下一次跳舞 void charge(int a,int b) int count=0; /定義舞曲計(jì)數(shù)以記錄他們能在第幾曲時(shí)在一起跳舞cirularQueue man1(m+1); cirularQueue woman1(n+1); Initqueue(man1,m); Initqueue(woman1,n); while(count=songnum

14、) int x, y; count+; -完整版學(xué)習(xí)資料分享測(cè)試結(jié)果:- -WORD 格式-可編輯-專業(yè)資料- 測(cè)試結(jié)果:- man1.Pop(x); woman1.Pop(y); man1.push(x); woman1.push(y); if(x=a)&(y=b) cout第count 首曲:ta 號(hào)男生 b 號(hào)女生endl; break; /如果他們?cè)谶@個(gè)舞會(huì)上不能在一起跳舞,則輸出if(count=songnum+1) cout他們?cè)谶@個(gè)舞會(huì)上不可能在一起跳舞 endl; 五、-完整版學(xué)習(xí)資料分享總結(jié):主要利用用循環(huán)隊(duì)列的環(huán)C+,程序開(kāi)始定義了類display()函數(shù)和 charge(

15、)函數(shù),其中 display()用于對(duì)各位同學(xué)編號(hào)和每循環(huán)隊(duì)列是一種環(huán)狀的隊(duì)列并- cirular,其中有頭指針,尾指針及數(shù)據(jù)總結(jié):主要利用用循環(huán)隊(duì)列的環(huán)C+,程序開(kāi)始定義了類display()函數(shù)和 charge()函數(shù),其中 display()用于對(duì)各位同學(xué)編號(hào)和每循環(huán)隊(duì)列是一種環(huán)狀的隊(duì)列并- cirular,其中有頭指針,尾指針及數(shù)據(jù)六、本設(shè)計(jì)采用的是循環(huán)隊(duì)列的基本操作順利的解決學(xué)生舞曲搭配問(wèn)題,狀結(jié)構(gòu),循環(huán)地執(zhí)行出列入列操作并在出隊(duì)列時(shí)進(jìn)行配對(duì)并輸出配對(duì)情況,而整個(gè)過(guò)程不需要不需要移動(dòng)元素使程序在空間復(fù)雜度上降到最小,采用指針的移動(dòng)大大加快了程序的執(zhí)行效率。并且對(duì)輸入進(jìn)行了改進(jìn),以防止用戶隨意輸入時(shí)出現(xiàn)的各種意想不到的錯(cuò)誤。本次程序設(shè)計(jì)中所用語(yǔ)言為域等。隨之定義了析構(gòu)函數(shù),釋放對(duì)象,然后進(jìn)行了隊(duì)列的基本操作,有隊(duì)列的申明,判斷隊(duì)空及隊(duì)滿,出隊(duì),入隊(duì),其核心是隊(duì)的輸出情況, charge()用于計(jì)算已編號(hào)的同學(xué)在第幾曲中進(jìn)行配對(duì)。且對(duì)頭元素指向隊(duì)尾元素,學(xué)生搭配問(wèn)題是典型的只有采用循環(huán)隊(duì)列才能解決的問(wèn)題,實(shí)驗(yàn)表明該算法的空間復(fù)雜度優(yōu)于其他算法。通過(guò)這次實(shí)驗(yàn),我發(fā)現(xiàn)自己在數(shù)據(jù)結(jié)構(gòu)這方面真是知之甚少,以前學(xué)習(xí)的知識(shí)也多有遺忘。與其說(shuō)這是一次學(xué)習(xí),倒不如說(shuō)這是一次檢測(cè)。所以,這次實(shí)驗(yàn)讓我很好的認(rèn)清自己對(duì)數(shù)據(jù)結(jié)

溫馨提示

  • 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)論