




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上一問題描述1.實驗題目: 設(shè)停車場是一個可停放 n 輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端)。若停車場內(nèi)已經(jīng)停滿 n輛車,那么后來的車只能在門外的便道上等候。一旦有車開走,則排在便道上的第一輛車即可開入。當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場。每輛停放在車場的車在它離開停車場時必須按它停留的時間長短繳納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。要求:根據(jù)各結(jié)點的信息,調(diào)用
2、相應(yīng)的函數(shù)或者語句,將結(jié)點入棧入隊,出棧或者出隊。2 需求分析1.程序所能達(dá)到的基本可能:程序以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行模擬管理。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。同時另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。輸入數(shù)據(jù)按到達(dá)或離去的時刻有序。當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“到達(dá)”(A表示)信息,汽車標(biāo)識(牌照號)以及到達(dá)時刻時,應(yīng)輸出汽車在停車場內(nèi)或者便道上的停車位置;當(dāng)輸入數(shù)據(jù)包括數(shù)據(jù)項為汽車的“離去”(D表示)信息,汽車標(biāo)識(牌照號)以及離去時刻時,應(yīng)輸出汽車在停車場停留的時間和應(yīng)繳納的費用(便道上停留的時間不收費);當(dāng)輸入
3、數(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.輸入輸出形式及輸入值范圍: 程序運行后進(jìn)入循環(huán),顯示提示信息:“Please input the state,number and time of the car:”,提示用戶輸入車輛信息(“到達(dá)”或者“離開”,車牌編號,到達(dá)或者離開的時間)。若車輛信息為“到達(dá)”,車輛信息開始進(jìn)棧(模擬停車場),當(dāng)棧滿,會顯示棧滿信息:“The parking place is full!”,同
4、時車輛進(jìn)隊列(模擬停車場旁便道),并顯示該進(jìn)入便道車輛的車牌編號,讓用戶知道該車的具體位置;若車輛信息為“離開”,會顯示該車進(jìn)入停車場的時間以及相應(yīng)的停車費用,若該車較部分車早進(jìn)停車場,這部分車需先退出停車場,暫時進(jìn)入一個新棧為其讓道,會顯示進(jìn)入新棧的車輛的車牌編號及其入停車場的時間,當(dāng)待離開車離開停車場后,這部分車會重新進(jìn)入停車場,同時便道上的第一輛車進(jìn)入停車場;若輸入(P,0,0),會顯示停車場的車數(shù);若輸入(W,0,0),會顯示便道上的車數(shù);若輸入(E,0,0),程序會跳出循環(huán),同時程序結(jié)束;若輸入為其他字母,程序會顯示“ERROR!”報錯。若便道上沒有車輛???,會顯示便道為空的信息:用
5、戶每輸入一組數(shù)據(jù),程序就會根據(jù)相應(yīng)輸入給出輸出。輸入值第一個必須為字母,后兩個為數(shù)字。3.測試數(shù)據(jù)要求:用戶輸入字母時,輸入大寫或小寫,都可以被該程序識別,正常運行。但要求用戶輸入數(shù)據(jù)時,三個數(shù)據(jù)項之間必須用逗號相分隔開。三概要設(shè)計 為了實現(xiàn)上述功能,該程序以棧模擬停車場以及臨時停放為給要離去的汽車讓路而從停車場退出來的汽車的場地,以隊列模擬車場外的便道,因此需要棧和隊列這兩個抽象數(shù)據(jù)類型。1. 棧抽象數(shù)據(jù)類型定義:ADT SqStack 數(shù)據(jù)對象:D=, i=1,2,3.,n,n 數(shù)據(jù)關(guān)系:R=()|D,struct car; 基本操作: Judge_Output(s,q,r);/根據(jù)r中車
6、輛信息控制車輛是入棧s還是 入隊q以及相關(guān)操作 A_cars(s,q, a);/將到達(dá)車輛a的信息入棧s或者入隊q D_cars(s,q, d);/將待離開車輛d出棧s,并將q中相應(yīng)車輛 入棧并進(jìn)行相關(guān)的操作ADT SqStack2.隊列抽象數(shù)據(jù)類型定義:ADT LinkQueue 數(shù)據(jù)對象:D=Qnode *,Qnode *,i=1,2,3.,n,n; 數(shù)據(jù)關(guān)系:R=; 基本操作: Judge_Output(s,q,r);/根據(jù)r中車輛信息控制車輛是入棧s 還是入隊q以及相關(guān)操作 A_cars(s,q, a);/將到達(dá)車輛a的信息入棧s或者入隊q D_cars(s,q, d);/將待離開車輛
7、d出棧s,并將q中相應(yīng)車 輛入棧并進(jìn)行相關(guān)的操作ADT LinkQueue 3.主要算法流程圖:IJudge_Output算法流程圖:IIA_cars算法流程圖:IIID_cars算法流程圖:4.本程序保護(hù)模塊:主函數(shù)模塊棧單元模塊:實現(xiàn)棧的抽象數(shù)據(jù)類型隊列單元模塊:實現(xiàn)隊列的抽象數(shù)據(jù)類型調(diào)用關(guān)系:四詳細(xì)設(shè)計1.相關(guān)頭文件庫的調(diào)用說明:#include<stdio.h> #include<stdlib.h>#define MAXSIZE 14#define n 2#define fee 102.元素類型、結(jié)點類型和結(jié)點指針類型:struct car char bb; i
8、nt num; int time; ;struct rangweicarint num; int time;typedef struct stackkstruct rangweicar HMAXSIZE; int topp;SqStackk;#define QNODE struct QnodeQNODE int data; QNODE *next; ;3.棧類型和隊列類型:typedef struct stackstruct car Gn; int top;SqStack;typedef struct linkqueueQNODE *front,*rear; int geshu;LinkQue
9、ue;/部分基本操作的偽碼實現(xiàn)void Judge_Output(SqStack *s,LinkQueue *q,struct car *r) if(*r).bb='E'|(*r).bb='e') printf("STOP!n"); else if(*r).bb='P'|(*r).bb='p')printf("The number of parking cars is %dn",(s->top)+1);else if(*r).bb='W'|(*r).bb='w&
10、#39;)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("ERROR!n");A_cars(SqStack *s,LinkQueue *q,struct car a)QNODE *t;if(s->top!=n-1) (
11、s->top)+; (s->Gs->top).bb=a.bb;(s->Gs->top).num=a.num;(s->Gs->top).time=a.time;elseprintf("The parking place is full!n"); t=(QNODE *)malloc(sizeof(QNODE); t->data=a.num; t->next=NULL; q->rear->next=t; q->rear=t; printf("the number of the car in the
12、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(d.num=(s->Gs->top).num)x=d.time-(s->Gs->top).time;y=fee*x; printf("The time is %.2f hours,the fee is %.2f yuann",x,y); if(q-&g
13、t;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=d.time; free(p); q->geshu-; if(q->front->next=NULL) q->rear=q->front; return 1; else for(i=0;i<(s-
14、>top);i+) if(s->Gi).num!=d.num) continue;else break; if(i>=(s->top) printf("ERROR!n"); return -1; x=d.time-(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->top);j&g
15、t;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-; while(k
16、->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->fro
17、nt->next=p->next; (s->Gs->top).num=p->data; (s->Gs->top).time=d.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-&g
18、t;top=-1; q=(LinkQueue *)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"); for(i=0;i<MAXSIZE;i+)
19、printf("Please input the 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)試中最順利的一個,只在一個地方上出了問題,就是輸入字符時由于
20、回車鍵也是字符,回車鍵總會被讀入,導(dǎo)致經(jīng)常輸出“ERROR!”。后來找到原因后在scanf函數(shù)后緊接著加了一個getchar();語句后就恢復(fù)了正常。2.方法優(yōu)缺點分析:優(yōu)點:用棧和隊列來模擬停車場讓整個問題顯得簡單,易于實現(xiàn);缺點:棧和隊列這兩個數(shù)學(xué)模型用在停車場管理上還是有失妥當(dāng)?shù)?,現(xiàn)實中停車場出口入口不可能為同一處,不可能當(dāng)一輛車要離開,在它后面進(jìn)來的車必須為它讓路,因此無法用棧的“后進(jìn)先出”原則來模擬;而且沒有考慮便道上的車在等待過程中可以中途開走等情況,而這些都無法用隊列的“先進(jìn)先出”原則來模擬。3.主要算法的時間和空間復(fù)雜度分析:(1)由于算法Judge_Output函數(shù)根據(jù)判斷條
21、件,每次只選擇一個程序段執(zhí)行,所以其時間復(fù)雜度是O(1);(2)由于算法A_cars函數(shù)根據(jù)判斷條件,將數(shù)據(jù)入棧或入隊列,所以其時間復(fù)雜度也是O(1);(3)由于算法D_cars函數(shù)在出棧數(shù)據(jù)不在最頂端時需將n個數(shù)據(jù)先出該棧,再入新棧,再回舊棧的操作,故其時間復(fù)雜度是O(n);(4)所有算法的空間復(fù)雜度都是O(1)。6 使用說明程序運行后用戶根據(jù)提示一次輸入車輛的狀態(tài)信息,車牌編號,時間,程序會根據(jù)車輛的狀態(tài)信息調(diào)用相應(yīng)的函數(shù),并輸出用戶想得到的信息。7 調(diào)試結(jié)果輸入數(shù)據(jù):(A,1,5),(A,2,10),(D,1,15),(A,3, 20),(A,4,25),(A,5,30),(D,2,35
22、),(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元;此時停車場有兩輛車,便道上無車。若停車場已滿,則會顯示停車場已滿的信息;若便道上無車等待停車,會顯示便道上無車的信息;若中途有車離開,需其后的車讓道,會顯示進(jìn)入臨時停車場的車輛的信息;若輸入(F,0,0),輸出“ERROR!”;若輸入(E,0,0),程序結(jié)束。運行結(jié)果截屏:8 附錄源程序文件清單:#include<stdio.h> /*調(diào)用的頭文件庫聲明*/#include<
23、;stdlib.h>#define MAXSIZE 14#define n 2#define fee 10 struct car /*用該結(jié)構(gòu)體來存放車的狀態(tài),編號和時間信息 */ char bb; int num; int time; ;typedef struct stack /*用該棧來模擬停車場*/struct car Gn; int top;SqStack;struct rangweicar /*用該結(jié)構(gòu)體來存放臨時讓出的車輛的編號以及時間信息*/int num; int time;typedef struct stack /*用該棧來模擬臨時讓出的車輛的??繄龅?/struc
24、t rangweicar HMAXSIZE; int topp;SqStackk;#define QNODE struct QnodeQNODE int data; /*鏈隊結(jié)點的類型*/QNODE *next; ;typedef struct linkqueue /*用該鏈隊來模擬便道*/QNODE *front,*rear; int geshu; LinkQueue;void Judge_Output(SqStack *s,LinkQueue *q,struct car *r) /*該算法通過傳遞來的車輛信息調(diào) 用相關(guān)函數(shù)實現(xiàn)操作*/ if(*r).bb='E'|(*r).
25、bb='e') /*若車輛狀態(tài)為E,終止程序*/ printf("STOP!n"); else if(*r).bb='P'|(*r).bb='p') /*若車輛狀態(tài)為P,輸出停車場車輛數(shù)*/ printf("The number of parking cars is %dn",(s->top)+1); else if(*r).bb='W'|(*r).bb='w') /*若車輛狀態(tài)為W,輸出便道車輛數(shù)*/ printf("The number of waitin
26、g cars is %dn",q->geshu); else if(*r).bb='A'|(*r).bb='a') /*若車輛狀態(tài)為A,調(diào)用A_cars函數(shù)*/ A_cars(s,q,*r); else if(*r).bb='D'|(*r).bb='d') /*若車輛狀態(tài)為D,調(diào)用D_cars函數(shù)*/ D_cars(s,q,*r); else printf("ERROR!n"); /*若車輛狀態(tài)為其他字母,報錯*/A_cars(SqStack *s,LinkQueue *q,struct car
27、 a) /*該算法實現(xiàn)對車輛狀態(tài)為到達(dá)的車輛的操Q(mào)NODE *t; 作*/ if(s->top!=n-1) /*若停車場還沒有滿,則車進(jìn)停車場,并存入車輛的狀態(tài),車牌編 (s->top)+; 號和到達(dá)時間信息*/ (s->Gs->top).bb=a.bb; (s->Gs->top).num=a.num; (s->Gs->top).time=a.time; else printf("The parking place is full!n"); /*若停車場已滿,車進(jìn)便道,并顯示該車的車牌編 t=(QNODE *)malloc(s
28、izeof(QNODE); 號,同時記錄便道車輛數(shù)目*/ t->data=a.num; t->next=NULL; q->rear->next=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) /*該算法實現(xiàn)車輛狀態(tài)為離開的車int i,j,l; 輛的操作*/ float x,y; QN
29、ODE *p; SqStackk *k; if(d.num=(s->Gs->top).num) /*若待離開車為最后進(jìn)停車場的車的情況*/ x=d.time-(s->Gs->top).time; y=fee*x; /*直接計算停車時間,費用并離去*/ printf("The time is %.2f hours,the fee is %.2f yuann",x,y); if(q->geshu=0) /*若便道上無車,函數(shù)返回*/ printf("The queue is empty!n"); return 0; Else /
30、*若便道上有車,第一輛車進(jìn)停車場*/ p=q->front->next; q->front->next=p->next; (s->Gs->top).num=p->data; /*并存入其車牌編號及進(jìn)停車場的時間*/ (s->Gs->top).time=d.time; free(p); q->geshu-; if(q->front->next=NULL) q->rear=q->front; /*若此時便道上無車,返回1*/ return 1; Else /*待離開的車不是最后進(jìn)停車場的那輛車的情況*/ fo
31、r(i=0;i<(s->top);i+) /*先找到待離開車在停車場中的位置*/ if(s->Gi).num!=d.num) continue;else break; if(i>=(s->top) printf("ERROR!n"); return -1; x=d.time-(s->Gi).time; /*計算待離開車的停車時間并計算費用*/ y=fee*x; printf("The time is %.2f hours,the fee is %.2f yuann",x,y); k=(SqStackk *)malloc
32、(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->top-; while(k->topp>=0) /*將新棧中的車重新開入停車場中*/ s->top+; (s->Gs->top).bb='A' (s->Gs->top).num=(k->Hk->topp
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 韓語五級試題及答案
- 物業(yè)案場培訓(xùn)
- 木牘教育數(shù)學(xué)課程體系
- 血透室肌肉痙攣護(hù)理查房
- 腦血管病變病人的護(hù)理
- 2025年中國母乳喂養(yǎng)乳頭罩行業(yè)市場全景分析及前景機(jī)遇研判報告
- 會計總賬業(yè)務(wù)流程規(guī)范
- 餐飲企業(yè)租賃及品牌輸出服務(wù)合同
- 航空公司新員工入職培訓(xùn)
- 車輛無償租賃與品牌形象展示協(xié)議
- 疑難病例討論課件
- 部編本小學(xué)語文六年級下冊畢業(yè)總復(fù)習(xí)教案
- JB∕T 11864-2014 長期堵轉(zhuǎn)力矩電動機(jī)式電纜卷筒
- 小兒氨酚黃那敏顆粒的藥動學(xué)研究
- 生態(tài)環(huán)境行政處罰自由裁量基準(zhǔn)
- 長沙市開福區(qū)2024屆六年級下學(xué)期小升初數(shù)學(xué)試卷含解析
- 2024年安徽普通高中學(xué)業(yè)水平選擇性考試化學(xué)試題及答案
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 2024年昆明巫家壩建設(shè)發(fā)展有限責(zé)任公司招聘筆試沖刺題(帶答案解析)
- 《取水許可核驗報告編制導(dǎo)則(試行)(征求意見稿)》
- 2023年國開(中央電大)04114《會計學(xué)概論》題庫及標(biāo)準(zhǔn)答案
評論
0/150
提交評論