版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、一問題描述1. 實驗題目:設(shè)停車場是一個可停放 n 輛汽車的狹長通道,且只有一個大門可供汽車進 出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序, 依次由北向南排列 (大門在最 南端,最先到達(dá)的第一輛車停放在車場的最北端) 。若停車場內(nèi)已經(jīng)停滿 n 輛車, 那么后來的車只能在門外的便道上等候。 一旦有車開走, 則排在便道上的第一輛 車即可開入。 當(dāng)停車場內(nèi)某輛車要離開時, 在它之后進入的車輛必須先退出車場 為它讓路, 待該輛車開出大門外, 其他車輛再按原次序進入車場。 每輛停放在車 場的車在它離開停車場時必須按它停留的時間長短繳納費用。 試為停車場編制按 上述要求進行管理的模擬程序。2. 基本要求:
2、以棧模擬停車場, 以隊列模擬車場外的便道, 按照從終端讀入數(shù)據(jù)的序列進 行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車的“到達(dá)”(A'表示)或“離去”(D'表示)信息、汽車標(biāo)識(牌照號)以及到達(dá)或離去的時刻。對每 一組輸入數(shù)據(jù)進行操作后的輸出信息為: 若是車輛到達(dá), 則輸出汽車在停車場內(nèi) 或者便道上的停車位置; 若是車輛離去, 則輸出汽車在停車場停留的時間和應(yīng)繳 納的費用(便道上停留的時間不收費) 。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實 現(xiàn)。3. 測試數(shù)據(jù):設(shè) n=2,輸入數(shù)據(jù)為:(A', 1, 5),('A', 2, 10),('D',
3、1, 15),('A', 3, 20),( A', 4, 25),( A', 5, 30),( D', 2, 35),( D', 4, 40),( E', 0, 0)。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼及到達(dá)或離去的時刻,其中,A'表示到達(dá);D'表示離去,E'表示 輸入結(jié)束。其中:( A', 1, 5)表示 1 號牌照車在 5這個時刻到達(dá),而( D', 1, 15)表示 1 號牌照車在 15這個時刻離去。4. 簡述每一部分的對象、目的和要求:I. 主函數(shù)部分: 對
4、象:棧,隊列; 目的:創(chuàng)建棧和隊列對停車場管理系統(tǒng)進行模擬; 要求:對棧和隊列進行初始化。II. 被調(diào)函數(shù)部分: 對象:棧和隊列中的結(jié)點(亦即車輛的信息) ; 目的:將結(jié)點存放到棧和隊列中,并作出正確的處理; 要求:根據(jù)各結(jié)點的信息,調(diào)用相應(yīng)的函數(shù)或者語句,將結(jié)點入棧入隊,出?;?者出隊。二.需求分析1.程序所能達(dá)到的基本可能:程序以棧模擬停車場, 以隊列模擬車場外的便道, 按照從終端讀入數(shù)據(jù)的序 列進行模擬管理。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。同時另設(shè)一個棧, 臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。 輸入數(shù)據(jù)按到達(dá)或離 去的時刻有序。當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“到達(dá)”(
5、A'表示)信息,汽車標(biāo)識(牌照號) 以及到達(dá)時刻時, 應(yīng)輸出汽車在停車場內(nèi)或者便道上的停車位 置;當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“離去”(D'表示)信息,汽車標(biāo)識(牌照號)以及離去時刻時, 應(yīng)輸出汽車在停車場停留的時間和應(yīng)繳納的費用 (便道 上停留的時間不收費) ;當(dāng)輸入數(shù)據(jù)項為 ( P', 0, 0)時,應(yīng)輸出停車場的車數(shù); 當(dāng)輸入數(shù)據(jù)項為( W ', 0, 0)時,應(yīng)輸出候車場車數(shù);當(dāng)輸入數(shù)據(jù)項為( E', 0, 0), 退出程序;若輸入數(shù)據(jù)項不是以上所述,就輸出 "ERROR!。"2. 輸入輸出形式及輸入值范圍:程序運行后進入循環(huán)
6、,顯示提示信息:“ Please input the state,number andtime of the car:”,提示用戶輸入車輛信息(“到達(dá)”或者“離開”,車牌編號,到 達(dá)或者離開的時間) 。若車輛信息為“到達(dá)”,車輛信息開始進棧(模擬停車場) , 當(dāng)棧滿,會顯示棧滿信息:“The parking place is full”,同時車輛進隊列(模擬停 車場旁便道),并顯示該進入便道車輛的車牌編號, 讓用戶知道該車的具體位置; 若車輛信息為“離開” ,會顯示該車進入停車場的時間以及相應(yīng)的停車費用,若 該車較部分車早進停車場, 這部分車需先退出停車場, 暫時進入一個新棧為其讓 道,會顯示
7、進入新棧的車輛的車牌編號及其入停車場的時間, 當(dāng)待離開車離開停 車場后, 這部分車會重新進入停車場, 同時便道上的第一輛車進入停車場; 若輸 入( P', 0, 0),會顯示停車場的車數(shù);若輸入( W', 0, 0),會顯示便道上 的車數(shù);若輸入( E', 0, 0),程序會跳出循環(huán),同時程序結(jié)束;若輸入為其他 字母,程序會顯示“ ERROR”報錯。若便道上沒有車輛??浚瑫@示便道為空 的信息:用戶每輸入一組數(shù)據(jù), 程序就會根據(jù)相應(yīng)輸入給出輸出。 輸入值第一個 必須為字母,后兩個為數(shù)字。3. 測試數(shù)據(jù)要求: 用戶輸入字母時,輸入大寫或小寫,都可以被該程序識別,正常運行。
8、但要 求用戶輸入數(shù)據(jù)時,三個數(shù)據(jù)項之間必須用逗號相分隔開。三概要設(shè)計 為了實現(xiàn)上述功能,該程序以棧模擬停車場以及臨時停放為給要離去的汽車 讓路而從停車場退出來的汽車的場地, 以隊列模擬車場外的便道, 因此需要棧和 隊列這兩個抽象數(shù)據(jù)類型。1.棧抽象數(shù)據(jù)類型定義:ADT SqStack數(shù)據(jù)對象: D=ai,bi,ci,di |ai int, bi int, ci int, di char ,i=1,2,3,n,n 0數(shù)據(jù)關(guān)系: R=(ai ,bi, di )| ai,bi,di D,ai , bi, di struct car;基本操作:Judge_Output(s,q,r);列抽象數(shù)據(jù)類型定義
9、:ADT LinkQueue數(shù)據(jù)對象: D=ai , bi ,ci |ai Qnode *,bi Qnode*, ci int ,i=1,2,3,n,n 0;數(shù)據(jù)關(guān)系: R= ;基本操作:Judge_Output(s,q,r);要算法流程圖:I. Judge_Output算法流程圖:II. A cars算法流程圖:幵始TF1F1T車進停車場車進便道1結(jié)束III. D cars算法流程圖:開始£該車是最后進T、停車場的車-F*1F結(jié)賬離開在該車后進的車退 出停車場后讓其結(jié) 賬離開便道上第一輛車進停車場結(jié)束4本程序保護模塊: 主函數(shù)模塊 棧單元模塊:實現(xiàn)棧的抽象數(shù)據(jù)類型隊列單元模塊:實現(xiàn)
10、隊列的抽象數(shù)據(jù)類型主函數(shù)模塊調(diào)用關(guān)系:棧單元模塊隊列單元模塊四.詳細(xì)設(shè)計1相關(guān)頭文件庫的調(diào)用說明: #in clude<> #in clude<> #defi ne MAXSIZE 14 #defi ne n 2 #defi ne fee 102元素類型、結(jié)點類型和結(jié)點指針類型:struct car char bb;int num;int time;struct ran gweicarint num;int time;typedef struct stackkstruct ran gweicar HMAXSIZE;int topp;SqStackk;#define QN
11、ODE struct QnodeQNODE int data;QNODE *next;3.棧類型和隊列類型:typedef struct stackstruct car Gn;int top;SqStack;typedef struct linkqueueQNODE *front,*rear;int geshu;LinkQueue;b='E'|(*r).bb='e')printf("STOP!n");else if(*r).bb='P'|(*r).bb='p')printf("The number o
12、f parking cars is %dn",(s->top)+1);else if(*r).bb='W'|(*r).bb='w')printf("The number of waiting cars is %dn",q->geshu); else if(*r).bb='A'|(*r).bb='a')A_cars(s,q,*r);else if(*r).bb='D'|(*r).bb='d')D_cars(s,q,*r);elseprintf("ER
13、ROR!n");A_cars(SqStack *s,LinkQueue *q,struct car a) QNODE *t;if(s->top!=n-1)(s->top)+;(s->Gs->top).bb=;(s->Gs->top).num=;(s->Gs->top).time=;elseprintf("The parking place is full!n");t=(QNODE *)malloc(sizeof(QNODE); t->data=;t->next=NULL; q->rear->n
14、ext=t;q->rear=t;printf("the number of the car in the access road is:%dn",q->rear->data); q->geshu+;int D_cars(SqStack *s,LinkQueue *q,struct car d)int i,j,l;float x,y;QNODE *p;SqStackk *k;if=(s->Gs->top).num)x=(s->Gs->top).time;y=fee*x;printf("The time is %.2f
15、hours,the fee is %.2f yuann",x,y); if(q->geshu=0)printf("The queue is empty!n");return 0;elsep=q->front->next; q->front->next=p->next; (s->Gs->top).num=p->data;(s->Gs->top).time=;free(p); q->geshu-;if(q->front->next=NULL)q->rear=q->front
16、;return 1;elsefor(i=0;i<(s->top);i+)if(s->Gi).num!= continue;else break; if(i>=(s->top) printf("ERROR!n");return -1;x=(s->Gi).time;y=fee*x;printf("The time is %.2f hours,the fee is %.2f yuann",x,y); k=(SqStackk *)malloc(sizeof(SqStackk);k->topp=-1;for(j=(s-&g
17、t;top);j>i;j-)k->topp+; (k->Hk->topp).num=(s->Gj).num; (k->Hk->topp).time=(s->Gj).time;s->top-; for(l=0;l<=(k->topp);l+)printf("the information(number and time) in the new stack is:n"); printf("%d,%dn",(k->Hl).num,(k->Hl).time); s->top-;w
18、hile(k->topp>=0)s->top+;(s->Gs->top).bb='A' (s->Gs->top).num=(k->Hk->topp).num; (s->Gs->top).time=(k->Hk->topp).time;k->topp-; if(q->geshu=0) printf("The access road is empty!n");return 2; else s->top+;p=q->front->next; q->fr
19、ont->next=p->next;(s->Gs->top).num=p->data;(s->Gs->top).time=;free(p); q->geshu-;if(q->front->next=NULL)q->rear=q->front;return 3;4.主函數(shù)的偽碼: main()SqStack *s;LinkQueue *q;QNODE *p;struct car aaMAXSIZE; int i;s=(SqStack *)malloc(sizeof(SqStack);s->top=-1;q=(LinkQ
20、ueue *)malloc(sizeof(LinkQueue);p=(QNODE *)malloc(sizeof(QNODE);p->next=NULL;q->front=q->rear=p;q->geshu=0;printf(" *n");printf(" *n");printf(" *停車場管理系統(tǒng)*n");printf(" *n");printf("*n");f*for(i=0;i<MAXSIZE;i+)printf("Please input th
21、e state,number and time of the car:n");scanf("%c,%d,%d",&(aai.bb),&(aai.num),&(aai.time); getchar();Judge_Output(s,q,&aai);if(aai.bb='E'|aai.bb='e') break;5.函數(shù)調(diào)用關(guān)系:五測試分析:1.出現(xiàn)問題及解決辦法:該程序是四個程序調(diào)試中最順利的一個, 只在一個地方上出了問題,就是輸 入字符時由于回車鍵也是字符,回車鍵總會被讀入,導(dǎo)致經(jīng)常輸出“ ERRO!
22、。 后來找到原因后在seanf函數(shù)后緊接著加了一個getchar();語句后就恢復(fù)了正 常。2方法優(yōu)缺點分析:優(yōu)點:用棧和隊列來模擬停車場讓整個問題顯得簡單,易于實現(xiàn);缺點:棧和隊列這兩個數(shù)學(xué)模型用在停車場管理上還是有失妥當(dāng)?shù)?,現(xiàn)實中停車場出口入口不可能為同一處,不可能當(dāng)一輛車要離開,在它后面進來的車必須為 它讓路,因此無法用棧的“后進先出”原則來模擬;而且沒有考慮便道上的車在 等待過程中可以中途開走等情況, 而這些都無法用隊列的“先進先出”原則來模 擬。3主要算法的時間和空間復(fù)雜度分析:(1) 由于算法Judge_Output函數(shù)根據(jù)判斷條件,每次只選擇一個程序段執(zhí)行, 所以其時間復(fù)雜度是0
23、(1);(2) 由于算法A_cars函數(shù)根據(jù)判斷條件,將數(shù)據(jù)入?;蛉腙犃校云鋾r間復(fù) 雜度也是O(1);(3)由于算法D_cars函數(shù)在出棧數(shù)據(jù)不在最頂端時需將 n個數(shù)據(jù)先出該棧,再 入新棧,再回舊棧的操作,故其時間復(fù)雜度是 0( n);(4)所有算法的空間復(fù)雜度都是0(1)。六使用說明程序運行后用戶根據(jù)提示一次輸入車輛的狀態(tài)信息,車牌編號,時間,程序會根據(jù)車輛的狀態(tài)信息調(diào)用相應(yīng)的函數(shù),并輸出用戶想得到的信息。七.調(diào)試結(jié)果輸入數(shù)據(jù):('A'1,5),('A'2,10),('D'1,15),('A'3,20),('A
24、9;4,25), A' 5,30 ), D' 2,35), D' 4,40), P' 0,0), W' 0,0),('F', 0,0), E' 0,0)。輸出數(shù)據(jù):1號車停放時間為10小時,收費100元;2號車停放時間為25小時, 收費250元;4號車停放5小時,收費50元;此時停車場有兩輛車,便道上無 車。若停車場已滿,則會顯示停車場已滿的信息;若便道上無車等待停車,會顯 示便道上無車的信息;若中途有車離開,需其后的車讓道,會顯示進入臨時停車 場的車輛的信息;若輸入(F',0,0),輸出“ERROR”;若輸入(E'
25、; 0,0), 程序結(jié)束。運行結(jié)果截屏:u UM05IJIK0 耳“好n KGHULAU u e «- e 耳二二-也 4" :玉 L0:a4 nd rbnF 1 i 1hh Al i 匚ykYhlAl pl Al fatO七 七 sruslut n”r>二口lln 一3-日 cicrr廿 Kbi khiGo3L8二 八.附錄源程序文件清單:#include<>/* 調(diào)用的頭文件庫聲明 */#include<>#define MAXSIZE 14#define n 2#define fee 10struct car char bb; int n
26、um; int time;typedef struct stack struct car Gn; int top;SqStack;struct rangweicarint num;int time;typedef struct stackstruct rangweicar HMAXSIZE;int topp; SqStackk;#define QNODE struct Qnode QNODE int data;QNODE *next;typedef struct linkqueue QNODE *front,*rear;int geshu; LinkQueue;void Judge_Outpu
27、t(SqStack *s,LinkQueue *q,struct car *r) /* 該算法通過傳遞來的車輛信息調(diào) 用相關(guān)函數(shù)實現(xiàn)操作 */if(*r).bb='E'|(*r).bb='e')/* 若車輛狀態(tài)為E',終止程序 */printf("STOp!n");else if(*r).bb='p'|(*r).bb='p')/* 若車輛狀態(tài)為printf("The number of parking cars is %dn",(s->top)+1);else if(*r).b
28、b='W'|(*r).bb='w')/* 若車輛狀態(tài)為printf("The number of waiting cars is %dn",q->geshu);else if(*r).bb='A'|(*r).bb='a')/* 若車輛狀態(tài)為A_cars(s,q,*r);else if(*r).bb='D'|(*r).bb='d') D_cars(s,q,*r);else/* 用該結(jié)構(gòu)體來存放車的狀態(tài),編號和時間信息/* 用該棧來模擬停車場 */*/* 用該結(jié)構(gòu)體來存放臨時讓
29、出的車輛的編號以及時間信息/* 用該棧來模擬臨時讓出的車輛的??繄龅?*/* 鏈隊結(jié)點的類型 */* 用該鏈隊來模擬便道 */* 若車輛狀態(tài)為*/p',輸出停車場車輛數(shù)*/W',輸出便道車輛數(shù)*/A',調(diào)用A_cars函數(shù)*/D',調(diào)用D_cars函數(shù)*/printf("ERROR!n"); /* 若車輛狀態(tài)為其他字母,報錯 */A_cars(SqStack *s,LinkQueue *q,struct car a) /* 該算法實現(xiàn)對車輛狀態(tài)為到達(dá)的車輛的操 QNODE *t;作 */if(s->top!=n-1) /* 若停車場還沒
30、有滿, 則車進停車場, 并存入車輛的狀態(tài), 車牌編 (s->top)+; 號和到達(dá)時間信息 */(s->Gs->top).bb=;(s->Gs->top).num=;(s->Gs->top).time=;elseprintf("The parking place is full!n"); /* 若停車場已滿,車進便道,并顯示該車的車牌編 t=(QNODE *)malloc(sizeof(QNODE); 號,同時記錄便道車輛數(shù)目 */ t->data=;t->next=NULL;q->rear->next=t;
31、q->rear=t;printf("the number of the car in the access road is:%dn",q->rear->data); q->geshu+;int D_cars(SqStack *s,LinkQueue *q,struct car d)int i,j,l;float x,y;QNODE *p; SqStackk *k;if=(s->Gs->top).num) /* 若待離開車為最后進停車場的車的情況 */ x=(s->Gs->top).time;y=fee*x; /* 直接計算停車
32、時間,費用并離去 printf("The time is %.2f hours,the fee is %.2f yuann",x,y); if(q->geshu=0) printf("The queue is empty!n");return 0;Else p=q->front->next;q->front->next=p->next; (s->Gs->top).num=p->data;(s->Gs->top).time=;free(p); q->geshu-;if(q->fr
33、ont->next=NULL) q->rear=q->front;/* 該算法實現(xiàn)車輛狀態(tài)為離開的車 輛的操作 */* 若便道上無車,函數(shù)返回 */* 若便道上有車,第一輛車進停車場*/*/* 并存入其車牌編號及進停車場的時間 */* 若此時便道上無車,返回 1*/return 1;Else/* 待離開的車不是最后進停車場的那輛車的情況 */for(i=0;i<(s->top);i+)if(s->Gi).num!=/* 先找到待離開車在停車場中的位置 continue;*/else break;if(i>=(s->top)printf("
34、;ERROR!n");return -1;x=(s->Gi).time;/* 計算待離開車的停車時間并計算費用 */y=fee*x;printf("The time is %.2f hours,the fee is %.2f yuann",x,y);k=(SqStackk *)malloc(sizeof(SqStackk);/* 設(shè)立一個新棧臨時停放為該車離開而讓k->topp=-1; 路的車輛 */ for(j=(s->top);j>i;j-)k->topp+; (k->Hk->topp).num=(s->Gj).num; (k->Hk->topp).time=(s->Gj).time;s->top-; for(l=0;l<=(k->topp);l+)printf("the information(number and time) in the new stack is:n");printf("%d,%dn",(k->Hl).num,(k->Hl).time); /* 顯示在新棧中的車輛信息 */ s
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 會計課程設(shè)計模板內(nèi)容
- 足球課程設(shè)計表示
- 鋼屋面課程設(shè)計
- JAVA日期日歷xp課程設(shè)計
- 露天爆破工程課程設(shè)計
- 鋼結(jié)構(gòu)t型屋架 課程設(shè)計
- 飛輪夾具機械課程設(shè)計
- 輪胎工廠課程設(shè)計
- 2024年車展環(huán)境保護與清潔服務(wù)協(xié)議
- 2024年量子計算機研發(fā)與投資合同
- 2024-2025學(xué)年北師版八年級物理上冊期末考試綜合測試卷
- 淺層氣浮的工藝原理及操作
- 醫(yī)療器械風(fēng)險管理計劃
- 北京保險中介行業(yè)營銷員增員及流動自律公約
- 柴油發(fā)電機施工方案33709
- 外來施工單位人員報備登記表完整
- 100以內(nèi)加減法混合[列豎式運算練習(xí)]
- 深圳市建設(shè)工程施工圍擋圖集(試行版_下半部分).pdf
- 全國城市雕塑行業(yè)設(shè)計收費標(biāo)準(zhǔn)
- 質(zhì)量管理組織機構(gòu)及職責(zé)
- 園區(qū)保安隊長的工作職責(zé)
評論
0/150
提交評論