數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-理發(fā)館仿真模擬(基于隊(duì)列)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-理發(fā)館仿真模擬(基于隊(duì)列)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-理發(fā)館仿真模擬(基于隊(duì)列)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-理發(fā)館仿真模擬(基于隊(duì)列)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-理發(fā)館仿真模擬(基于隊(duì)列)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)理發(fā)館仿真模擬(基于隊(duì)列)問題描述(或者需求分析)理發(fā)館一天的工作過程如下:

1)理發(fā)館有N把理發(fā)椅,可同時(shí)為N位顧客進(jìn)行理發(fā)。

2)理發(fā)師分三個(gè)等級(jí)(一級(jí)、二級(jí)、三級(jí)),對(duì)應(yīng)不同的服務(wù)收費(fèi)。

3)當(dāng)顧客進(jìn)門時(shí),需選擇某級(jí)別理發(fā)師,只要該級(jí)別的理發(fā)師有空椅,則可立即坐下理發(fā),否則需排隊(duì)等候。

4)一旦該級(jí)別的理發(fā)師有顧客理發(fā)完離去,排在隊(duì)頭的顧客便可開始理發(fā)。

5)若理發(fā)館每天連續(xù)營(yíng)業(yè)T分鐘,求

(1)一天內(nèi)顧客在理發(fā)館內(nèi)的平均逗留時(shí)間;

(2)顧客排隊(duì)等候理發(fā)的隊(duì)列長(zhǎng)度平均值;

(3)營(yíng)業(yè)時(shí)間到點(diǎn)后仍需完成服務(wù)的收尾工作時(shí)間;

(4)統(tǒng)計(jì)每天的營(yíng)業(yè)額;

(5)統(tǒng)計(jì)每天不同級(jí)別理發(fā)師的創(chuàng)收。基本要求:1)模擬理發(fā)館一天的工作過程:必須采用事件驅(qū)動(dòng)的離散模型(參考教科書3.5節(jié)離散事件模擬p65);

2)每個(gè)顧客到達(dá)和下一顧客到達(dá)時(shí)間的間隔應(yīng)是隨機(jī)的;

3)理發(fā)師編號(hào)、理發(fā)師級(jí)別和每天的營(yíng)業(yè)時(shí)間由用戶輸入;

4)某顧客挑選某一個(gè)級(jí)別的理發(fā)師而不得時(shí),選第一個(gè)隊(duì)列排隊(duì)等待;

5)每個(gè)顧客進(jìn)門時(shí)將生成三個(gè)隨機(jī)數(shù):

(1)durtime:進(jìn)門顧客理發(fā)所需服務(wù)時(shí)間(簡(jiǎn)稱:理發(fā)時(shí)間);

(2)intertime:下一顧客將到達(dá)的時(shí)間間隔(簡(jiǎn)稱:間隔時(shí)間);

(3)select:服務(wù)選項(xiàng)。

6)服務(wù)收費(fèi):應(yīng)包含服務(wù)時(shí)間和理發(fā)師級(jí)別兩個(gè)因素。

7)除了輸出統(tǒng)計(jì)的數(shù)據(jù)外,還需要顯示理發(fā)館的狀態(tài),可以采用文本方式(橫向顯示每張椅編號(hào)、理發(fā)師級(jí)別??v向表示等待該理發(fā)師理發(fā)的排隊(duì)長(zhǎng)度)。算法設(shè)計(jì)思想:在實(shí)現(xiàn)技術(shù)上,假設(shè)當(dāng)前temp每次將它加一表示過了一分鐘,然后判斷在這個(gè)時(shí)間單位中判斷是否有人理發(fā)完畢,如果有將此座位上的num置為-1。然后判斷是否有人可以接受服務(wù),如果有判斷是否有空椅子,如果有,則進(jìn)入理發(fā),否則將他入隊(duì)。重復(fù)執(zhí)行上面的過程,直到temp加到了其關(guān)門時(shí)間。顧客進(jìn)門和出門這兩個(gè)時(shí)刻發(fā)生的事情稱“事件”,按事件的先后次序逐個(gè)處理事件的工作方式稱“事件驅(qū)動(dòng)模擬”。離散事件驅(qū)動(dòng)模型的特點(diǎn)是只關(guān)注和刻畫事物的狀態(tài)變化(即事件),不關(guān)心變化的過渡過程。模型靠每一個(gè)事件引發(fā)其它事件的方式來維持運(yùn)轉(zhuǎn)。每個(gè)事件都有發(fā)生時(shí)間,模型的運(yùn)轉(zhuǎn)實(shí)際就是按事件發(fā)生時(shí)間順序逐個(gè)處理事件,'處理'將產(chǎn)生新的事件。因此,建模的關(guān)鍵就是全面分析事物的主要特點(diǎn),抽象出幾種能反映本質(zhì)的事件和它們之間的驅(qū)動(dòng)關(guān)系。系統(tǒng)時(shí)間就是當(dāng)前事件的事件發(fā)生時(shí)間,它不是等間隔變化而是跳躍變化的。程序中的數(shù)據(jù)結(jié)構(gòu)及存儲(chǔ)結(jié)構(gòu)說明:顧客結(jié)構(gòu):typedefstruct{intnum;intcometime;intdurtime;intwaittime;}cutpeople;理發(fā)椅結(jié)構(gòu)體:typedefstructcutnode{intnum;/*顧客編號(hào)*/intcometime;/*顧客到達(dá)時(shí)間*/structcutnode*next;}cutnode;/*隊(duì)列的結(jié)點(diǎn)定義*/隊(duì)列結(jié)構(gòu)體:typedefstruct{cutnode*front;cutnode*rear;}cutqueue;/*隊(duì)列的鏈?zhǔn)蕉x*/流程圖:部分圖示(程序運(yùn)行截圖)程序代碼:#defineNUM100#defineERROR0#defineKONG-1#include<stdio.h>#include<math.h>#include<conio.h>typedefstruct{intnum;intcometime;intdurtime;intwaittime;}cutpeople;/*顧客信息結(jié)點(diǎn)的定義*/typedefstructcutnode{intnum;/*顧客編號(hào)*/intcometime;/*顧客到達(dá)時(shí)間*/structcutnode*next;}cutnode;/*隊(duì)列的結(jié)點(diǎn)定義*/typedefstruct{cutnode*front;cutnode*rear;}cutqueue;/*隊(duì)列的鏈?zhǔn)蕉x*/intinitqueue(cutqueue*d1){d1->front=(cutnode*)malloc(sizeof(cutnode));if(d1->front){d1->front->next=NULL;d1->rear=d1->front;}elsereturn(OVERFLOW);}/*初始化隊(duì)列*/intenterqueue(cutqueue*d2,intcometime,intnum){cutnode*q;q=(cutnode*)malloc(sizeof(cutnode));if(q){q->cometime=cometime;q->num=num;q->next=NULL;d2->rear->next=q;d2->rear=q;}elsereturn(OVERFLOW);}/*入隊(duì)列*/cutnodedeleted(cutqueue*d3){cutnode*a;cutnodep;a=d3->front->next;d3->front->next=a->next;etime=a->cometime;p.num=a->num;if(d3->rear==a)d3->rear=d3->front;free(a);return(p);}/*出隊(duì)列*/intpdkong1(cutqueue*d4)/*判斷隊(duì)列是否為空*/{if(d4->front!=d4->rear)return(1);elsereturn(0);}voidinitundercut(cutpeople*undercut,intd5)/*數(shù)組undercut指的是理發(fā)店內(nèi)的位子*/{inti;for(i=0;i<d5;i++){undercut[i].num=-1;/*若位子上沒有人,則其num取值為-1*/undercut[i].cometime=-1;undercut[i].durtime=-1;undercut[i].waittime=-1;}}/*初始化理發(fā)店內(nèi)的位子情況*/intpdkong2(cutpeople*undercut,intd6){intk=0;while(k<d6){if(undercut[k].num==-1)break;elsek++;}if(k>=d6)return(-1);elsereturn(k);}/*判斷店內(nèi)是否有空位子,若有,返回位置,否則返回0*/intpdtime(cutpeople*undercut,intd7,inttime,intv[20]){intb=0,i=0,j;for(j=0;j<20;j++)v[j]=-1;/*數(shù)組v裝的是在此時(shí)刻同時(shí)理發(fā)完畢的人*/while(b<d7){if(undercut[b].cometime+undercut[b].waittime+undercut[b].durtime==time)v[i++]=b;b++;}}/*判斷在time時(shí)刻是否有人已經(jīng)理發(fā)完畢*/main(){intN,T,R;/*椅子數(shù).總時(shí)間.隨機(jī)數(shù)*/cutqueues;/*等待隊(duì)列*/inttemp=0;/*時(shí)間計(jì)數(shù)器*/intnumber_custeromer=1;/*顧客總數(shù)*/intintertime;/*記錄下一個(gè)顧客來的時(shí)間間隔*/intu[20],r,i,a;inttotallenth=0;cutnodez;cutpeople*undercut;floataverage_time,average_queuelength;undercut=(cutpeople*)malloc(N*sizeof(cutpeople));initundercut(undercut,N);initqueue(&s);printf("Pleaseshuruthechairs:");scanf("%d",&N);printf("Pleaseshuruyingyeshijian:");scanf("%d",&T);undercut[0].num=number_custeromer++;undercut[0].cometime=0;undercut[0].waittime=0;R=fabs(srand((unsigned)time(NULL)));/*產(chǎn)生隨機(jī)數(shù)*/undercut[0].durtime=15+R%50;intertime=2+R%10;clrscr();/*清屏*/printf("numcometimedurtime\n");while(temp<=T||pdkong1(&s)){intertime--;temp++;pdtime(undercut,N,temp,u);if(u[0]!=-1)/*判斷是否有理發(fā)完畢的人*/{for(r=0;r<20&&u[r]!=-1;r++){printf("%4d%4d%4d\n",undercut[u[r]].num,undercut[u[r]].cometime+undercut[u[r]].waittime,undercut[u[r]].durtime);undercut[u[r]].num=-1;if(pdkong1(&s)){z=deleted(&s);R=fabs(srand((unsigned)time(NULL)+temp));undercut[u[r]].durtime=15+R%50;undercut[u[r]].num=z.num;undercut[u[r]].cometime=etime;undercut[u[r]].waittime=etime;intertime=2+R%10;}}/*如果有理發(fā)完畢的人,并且隊(duì)列不空,就出隊(duì)*/}if(intertime==0)/*如果有人來理發(fā)了*/{R=fabs(srand((unsigned)time(NULL)+temp));intertime=2+R%10;if(T-temp>=intertime){i=pdkong2(undercut,N);/*判斷是否有空位子*/if(i>=0){undercut[i].durtime=15+R%50;if(T-temp>=undercut[i].durtime)/*判斷是否符合進(jìn)入條件*/{undercut[i].num=number_custeromer++;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論