數(shù)據(jù)結(jié)構(gòu) 舞伴搭配問題完全代碼_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu) 舞伴搭配問題完全代碼_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu) 舞伴搭配問題完全代碼_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu) 舞伴搭配問題完全代碼_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu) 舞伴搭配問題完全代碼_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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、#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>#define queuesize 5typedef struct /定義結(jié)構(gòu)體 char name20; /定義一個(gè)長(zhǎng)度為20的字符串,用來(lái)表示姓名 char sex; /定義一個(gè)char變量sex,用來(lái)表示性別,規(guī)定m表示男性,f 表示女性 person_type; typedef struct /定義循環(huán)隊(duì)列結(jié)構(gòu)體隊(duì)列 person_type *qBase; /儲(chǔ)存空間基址 int front; /頭

2、指針,若隊(duì)列不空,指向隊(duì)列頭元素 int rear; /尾指針,若隊(duì)列不空,指向隊(duì)列尾元素的下一個(gè)位置cir_queue; void init_queue(cir_queue *q) /初始化循環(huán)隊(duì)列 q->qBase =(person_type *)malloc(sizeof(person_type)*queuesize); /動(dòng)態(tài)創(chuàng)建儲(chǔ)存空間基址if(!q->qBase ) /創(chuàng)建失敗,退出程序!printf("動(dòng)態(tài)創(chuàng)建失敗,程序終止!");exit(-1); q->front=q->rear=0; /*void traverse_queue(c

3、ir_queue *q) /遍歷輸出循環(huán)隊(duì)列元素int i=q->front ;while(i != q->rear )/當(dāng)頭指針與尾指針相等時(shí)結(jié)束while循環(huán)printf("%sn",q->qB );/輸出元素的名字i=(i+1)%queuesize; /解決假溢出問題*/bool full_queue(cir_queue *q) /判斷循環(huán)隊(duì)列是否為滿/當(dāng)尾指針的下一個(gè)位置等于頭指針時(shí),隊(duì)列為滿 / 為滿返回true,否則返回falseif(q->rear+1)%queuesize = q->front )return

4、true;elsereturn false;bool empty_queue(cir_queue *q)/判斷循環(huán)隊(duì)列是否為空/當(dāng)頭指針位置等于尾指針時(shí),循環(huán)隊(duì)列為空, /為空返回true,否則返回falseif(q->front = q->rear )return true;elsereturn false;void en_queue(cir_queue *q,person_type p)/進(jìn)隊(duì)函數(shù),使p進(jìn)入隊(duì)列 if(full_queue(q)/判斷是否為滿printf("隊(duì)列已滿,無(wú)法實(shí)現(xiàn)進(jìn)隊(duì)操作,程序終止!");exit(-1);else /不滿進(jìn)行操作

5、q->qBaseq->rear = p;q->rear=(q->rear+1)%queuesize; /尾指針指向下一個(gè)位置person_type de_queue(cir_queue *q)/出隊(duì)函數(shù),用p返回出隊(duì)值 person_type p; if(empty_queue(q)/判斷是否為空printf("隊(duì)列為空,無(wú)法實(shí)現(xiàn)出隊(duì)操作,程序終止!");exit(-1);else /不為空進(jìn)行操作 p=q->qBaseq->front; q->front=(q->front+1)%queuesize; return p; i

6、nt length_queue(cir_queue *q)/求循環(huán)隊(duì)列元素個(gè)數(shù)return q->rear-q->front ; /尾指針位置減去頭指針位置即可person_type queue_front(cir_queue *q)/訪問隊(duì)頭元素,并返回 if(empty_queue(q)/判斷是否為空printf("隊(duì)列為空,操作失?。?quot;);exit(-1);return q->qBaseq->front; void dancepartners(cir_queue femaledancer,cir_queue maledancer,int lun

7、)/舞伴配對(duì)函數(shù) int m = length_queue(&femaledancer); /計(jì)算女隊(duì)人數(shù)int n = length_queue(&maledancer); /計(jì)算男隊(duì)人數(shù)for(int j = 1;j<=lun;+j) /for循環(huán)表示舞會(huì)進(jìn)行的輪數(shù)情況/通過對(duì)男女隊(duì)人數(shù)的比較,進(jìn)行一下操作 if(m>n)/ 女隊(duì)人數(shù)多于男隊(duì),女隊(duì)有剩余隊(duì)員person_type p; person_type q;person_type s;printf("-");printf("第%d輪配對(duì)情況:n",j);for(in

8、t i =1;i<=n;+i ) /for循環(huán)實(shí)現(xiàn)配對(duì)操作 p=de_queue(&maledancer); q=de_queue(&femaledancer); /出隊(duì)的男女舞伴 printf("男:%s",); printf("和女:%s配對(duì)成功n",);/輸出配對(duì)情況en_queue(&maledancer,p); en_queue(&femaledancer,q); /將出隊(duì)的男女舞伴重新進(jìn)隊(duì) /輸出女隊(duì)剩余隊(duì)員情況,并輸出在下一輪首先出場(chǎng)的隊(duì)員姓名 printf("女隊(duì)中還

9、有%d個(gè)人在等待!n",m-n); s=queue_front(&femaledancer); , printf("女隊(duì)中第一個(gè)等待的是:%sn",); else if(m<n) /男隊(duì)人數(shù)多于女隊(duì),男隊(duì)有剩余隊(duì)員 person_type p; person_type q;person_type s;printf("-"); printf("第%d輪配對(duì)情況:n",j); for(int i =1;i<=m;+i ) p=de_queue(&maledancer);q=de_queue

10、(&femaledancer);/出隊(duì)的男女舞伴 printf("男:%s",); printf("和女:%s配對(duì)成功n",);/輸出配對(duì)情況en_queue(&maledancer,p); en_queue(&femaledancer,q);/將出隊(duì)的男女舞伴重新進(jìn)隊(duì) /輸出男隊(duì)剩余隊(duì)員情況,并輸出在下一輪首先出場(chǎng)的隊(duì)員姓名 printf("男隊(duì)中還有%d個(gè)人在等待!n",n-m); s=queue_front(&maledancer); printf("男隊(duì)中第一個(gè)

11、等待的是:%sn",); else /男女隊(duì)人數(shù)相等,沒有剩余隊(duì)員person_type p; person_type q;person_type s;printf("-");printf("第%d輪配對(duì)情況:n",j); for(int i =1;i<=m; +i)p=de_queue(&maledancer); q=de_queue(&femaledancer); /出隊(duì)的男女舞伴 printf("男:%s",); printf("和女:%s配對(duì)成功n",

12、);/輸出配對(duì)情況en_queue(&maledancer,p); en_queue(&femaledancer,q);/將出隊(duì)的男女舞伴重新進(jìn)隊(duì) printf("沒有人剩余!n"); void main() person_type p,dancersqueuesize; /鍵盤輸入男女舞者的信息,包括姓名,性別 int i,num; printf("輸入男女dancer的總?cè)藬?shù):n"); scanf("%d",&num); printf("輸入姓名和性別(用m表示男性,用f表示女性),如

13、: nzhangsannmn"); for(i=0;i<num;i+) scanf("%s",&); getchar(); scanf("%c",&dancersi.sex); if(dancersi.sex!='f'&&dancersi.sex!='m')/判斷輸入信息是否合法 printf("第%d個(gè)人的信息有誤,請(qǐng)重新輸入",(i-)+1); cir_queue maledancer,femaledancer;/定義兩個(gè)循環(huán)

14、隊(duì)列結(jié)構(gòu)體 init_queue(&maledancer);/調(diào)用init_queue()函數(shù)置空隊(duì)列maledancer表示男隊(duì) init_queue(&femaledancer);/調(diào)用init_queue()函數(shù)置空隊(duì)列femaledancer表示女隊(duì) for(i=0;i<num;i+) p=dancersi;/結(jié)構(gòu)體整體賦值 if(p.sex='f')/女的進(jìn)隊(duì)列femaledancer en_queue(&femaledancer,p); printf("%s進(jìn)女隊(duì)n",); else/男的進(jìn)隊(duì)列maled

15、ancer en_queue(&maledancer,p); printf("%s進(jìn)男隊(duì)n",); /*int j;int m = length_queue(&femaledancer);int n = length_queue(&maledancer);if(m<n) person_type p; person_type q;person_type s;for(j=1;j<=7;+j) printf("第%d輪配對(duì)情況:n",j); for(int i =1;i<=m;+i )p=de_queue(

16、&maledancer); q=de_queue(&femaledancer); printf("男:%s",); printf("和女:%s配對(duì)成功n",); en_queue(&maledancer,p); en_queue(&femaledancer,q); printf("男隊(duì)中還有%d個(gè)人在等待!n",n-m); s=queue_front(&maledancer); printf("男隊(duì)中第一個(gè)等待的是:%sn",);*/* int m =length_queue(&maledance

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論