版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上計(jì)算機(jī)軟件技術(shù)基礎(chǔ) 實(shí)驗(yàn)報(bào)告I數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)二:停車場(chǎng)管理問題一、問題描述1.實(shí)驗(yàn)題目: 設(shè)停車場(chǎng)是一個(gè)可停放 n 輛汽車的狹長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北端)。若停車場(chǎng)內(nèi)已經(jīng)停滿 n輛車,那么后來的車只能在門外的便道上等候。一旦有車開走,則排在便道上的第一輛車即可開入。當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場(chǎng)。每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長短繳納費(fèi)用。試為停車場(chǎng)
2、編制按上述要求進(jìn)行管理的模擬程序。2基本要求:以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入數(shù)據(jù)的序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車的“到達(dá)”(A表示)或“離去”(D表示)信息、汽車標(biāo)識(shí)(牌照號(hào))以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或者便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)停留的時(shí)間和應(yīng)繳納的費(fèi)用(便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。3測(cè)試數(shù)據(jù): 設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,10),(D,1,15),(A,3, 20),(A,4,25),(A,5,3
3、0),(D,2,35),(D,4,40),(E,0,0)。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車 “到達(dá)”或“離去”信息、汽車牌照號(hào)碼及到達(dá)或離去的時(shí)刻,其中,A表示到達(dá);D表示離去,E表示輸入結(jié)束。其中:(A,1,5)表示1號(hào)牌照車在5這個(gè)時(shí)刻到達(dá),而(D,1,15)表示1號(hào)牌照車在15這個(gè)時(shí)刻離去。二、需求分析 1.程序所能達(dá)到的基本可能: 本程序用來模擬一個(gè)可停放n輛車的停車場(chǎng)的停車管理問題。用棧和隊(duì)列模擬停車場(chǎng)及場(chǎng)外通道,輸入車輛狀態(tài)(到達(dá)或者離開),車牌號(hào)和時(shí)間,就可顯示停車位置或者該車在停車場(chǎng)停留時(shí)間及應(yīng)繳費(fèi)用。2.輸入的形式及輸入值范圍: 程序接受5個(gè)命令,分別是:到達(dá)(A,車牌號(hào),
4、時(shí)間);離去(D,車牌號(hào),時(shí)間);停車場(chǎng)(P, 0, 0)顯示停車場(chǎng)的車數(shù);候車場(chǎng)(W, 0, 0)顯示候車場(chǎng)的車數(shù);退出(E, 0, 0)退出程序。3.輸出的形式: 對(duì)于車輛到達(dá),要輸出汽車在停車場(chǎng)內(nèi)或者便道上的停車位置;對(duì)于車輛離去,則輸出汽車在停車場(chǎng)停留的時(shí)間和應(yīng)繳納的費(fèi)用(便道上不收費(fèi))。用戶輸入完畢后,程序自動(dòng)運(yùn)行輸出運(yùn)行結(jié)果。4.測(cè)試數(shù)據(jù)要求: 設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,10),(D,1,15),(A,3, 20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車 “到達(dá)”或“離去”信息
5、、汽車牌照號(hào)碼及到達(dá)或離去的時(shí)刻,其中,A表示到達(dá);D表示離去,E表示輸入結(jié)束。其中:(A,1,5)表示1號(hào)牌照車在5這個(gè)時(shí)刻到達(dá),而(D,1,15)表示1號(hào)牌照車在15這個(gè)時(shí)刻離去。三、概要設(shè)計(jì) 為了實(shí)現(xiàn)上述功能,該程序以棧模擬停車場(chǎng)以及臨時(shí)停放為給要離去的汽車讓路而從停車場(chǎng)退出來的汽車的場(chǎng)地,以隊(duì)列模擬車場(chǎng)外的便道,因此需要棧和隊(duì)列這兩個(gè)抽象數(shù)據(jù)類型。 1. 棧抽象數(shù)據(jù)類型定義 : ADT SqStack 數(shù)據(jù)對(duì)象:D=ai,bi,ci,di|aiint, biint,ciint,dichar),i =1,2.,n,n0: 數(shù)據(jù)關(guān)系:R=(ai,bi,di,)|ai,bi,diD,ai,b
6、i,distruct car; 基本操作: Car_enter(carnum,cartime)/將到達(dá)車輛a的信息入棧s或者入隊(duì)q Car_Leave(carnum,cartime);/將待離開車輛d出棧s,并將q中相應(yīng)車輛入棧并進(jìn)行相關(guān)的操作 Result(char carmove,int carnum,int cartime)/根據(jù)輸入信息完成車輛的離開或者到達(dá) ADT SqStack ADT的C語言形式說明: typedef struct /構(gòu)造一個(gè)順序棧struct Node1 homeMaxSize; int stacktop; /棧頂?shù)闹羔楽tack;2. 隊(duì)列抽象數(shù)據(jù)類型定義 A
7、DT LinkQueue 數(shù)據(jù)對(duì)象:D=ai,bi,ci|aiQnode*, biQnode*,ciint), i =1,2.,n,n0; 數(shù)據(jù)關(guān)系:R= 基本操作:Car_enter(carnum,cartime)/將到達(dá)車輛a的信息入棧s或者入隊(duì)q Car_Leave(carnum,cartime);/將待離開車輛d出棧s,并將q中相應(yīng)車輛入棧并進(jìn)行相關(guān)的操作 Result(char carmove,int carnum,int cartime)/根據(jù)輸入信息完成車輛的離開或者到達(dá) ADT LinkQueueADT的C語言形式說明:typedef struct /構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列QNode
8、 *front,*rear;Queue; void Car_enter(int carnum,int cartime) /到達(dá)車輛的信息入?;蛘呷腙?duì)void Car_Leave(int carnum,int cartime)/車離開int Result(char carmove,int carnum,int cartime)/根據(jù)輸入信息完成車輛的離開或者達(dá)到 3. 主程序流程及其模塊調(diào)用關(guān)系:1) 主程序流程: 主函數(shù)提示用戶輸入指令:到達(dá)(A,車牌號(hào),時(shí)間);離去(D,車牌號(hào),時(shí)間);停車場(chǎng)P 顯示停車場(chǎng)的車數(shù);候車場(chǎng)W顯示候車場(chǎng)的車數(shù);退出E退出程序。 調(diào)用int Result(char
9、 carmove,int carnum,int cartime)根據(jù)輸入信息完成車輛的離開或者達(dá)到。 若輸入A則調(diào)用Car_enter(int carnum,int cartime) ,創(chuàng)建順序棧CarS和鏈?zhǔn)疥?duì)列CarQ,根據(jù)棧是否滿決定輸入的信息入棧還是入隊(duì)列。若棧未滿,輸入的車輛信息入棧,若已滿,入隊(duì)列。 若輸入D則調(diào)用Car_Leave(int carnum,int cartime):創(chuàng)建一個(gè)臨時(shí)棧存放退出讓路的車,若在車庫中找到對(duì)應(yīng)的車,車庫中該車后面的車輛信息進(jìn)入臨時(shí)棧CarS2,該車出棧,顯示車牌號(hào),此時(shí)時(shí)間,停留時(shí)間,應(yīng)繳費(fèi)用。臨時(shí)棧中的車的信息再回到CarS中。此時(shí)若隊(duì)列Ca
10、rQ不為空則將隊(duì)列中車輛信息放入棧CarS中。若在車庫中找不到對(duì)應(yīng)的車的車牌號(hào)信息,則在表示候車場(chǎng)的隊(duì)列中找該車信息,如果它在隊(duì)列的最后,直接出列并輸出車牌號(hào),此時(shí)時(shí)間,停留時(shí)間,應(yīng)繳費(fèi)用。如果它不在隊(duì)尾,先把對(duì)應(yīng)信息保存在一個(gè)指向隊(duì)列的指針中,輸出車牌號(hào),此時(shí)時(shí)間,停留時(shí)間,應(yīng)繳費(fèi)用。刪除隊(duì)列中此結(jié)點(diǎn)表示此車離開候車場(chǎng)。 若輸入P,則輸出車庫車輛數(shù)PCar; 若輸入W,則輸出候車場(chǎng)車輛數(shù)WCar; 若輸入E,則退出程序。2) 調(diào)用關(guān)系 四、詳細(xì)設(shè)計(jì) 1. 元素類型、結(jié)點(diǎn)類型和結(jié)點(diǎn)指針類型:typedef struct Node1 /構(gòu)建一個(gè)結(jié)構(gòu)體 int carnum; int time;N
11、ode1;typedef struct Node2 int carnum; int time; struct Node2 *next;Node2; 2、 創(chuàng)建順序棧 typedef struct /構(gòu)造一個(gè)順序棧struct Node1 homeMaxSize; int stacktop; /棧頂?shù)闹羔楽tack;3、 創(chuàng)建鏈?zhǔn)疥?duì)列 typedef struct /構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列Node2 *front,*rear;Queue; 4. 車輛到達(dá):void Car_enter(int carnum,int cartime) /到達(dá)車輛的信息入?;蛘呷腙?duì) if(CarS.stacktop<
12、MaxSize)/如果棧沒有滿的時(shí)候CarS.homeCarS.stacktop.carnum=carnum;/到達(dá)車輛信息放入順序棧 CarS.homeCarS.stacktop.time=cartime; PCar+;/車庫里的車數(shù)量+1 printf("%d號(hào)車進(jìn)入停車場(chǎng)! 進(jìn)入時(shí)刻:%d 位置:%dn",CarS.homeCarS.stacktop.carnum,CarS.homeCarS.stacktop.time,PCar);CarS.stacktop+;/棧頂指針加一else /若棧滿CarQ.front->carnum=carnum; CarQ.fro
13、nt->time=cartime;/到達(dá)車輛信息加入到隊(duì)列中 WCar+; /候車場(chǎng)車輛數(shù)+1 printf("%d號(hào)車進(jìn)入候車場(chǎng)! 到達(dá)時(shí)刻:%d 位置:%dn",CarQ.front->carnum=carnum,CarQ.front->time=cartime,WCar); CarQ.front->next=(Node2 *)malloc(sizeof(Node2);/分配空間 CarQ.front=CarQ.front->next;/更改隊(duì)列指針5. 車輛離開void Car_Leave(int carnum,int cartime)/
14、車離開Stack CarS2;/構(gòu)造一個(gè)棧臨時(shí)存放為了讓位退出來的車 int i;int findcar=-1; Node2 *p,*f; CarS2.stacktop=0;/設(shè)臨時(shí)棧CarS2為空 for(i=0;i<CarS.stacktop;i+) /通過循環(huán)對(duì)比查找要離開的車if(carnum=CarS.homei.carnum) findcar=i;/如果要尋找的車在車庫里則讓findcar等于車的號(hào)碼 break; if(findcar!= -1) /如果在車庫里找到這輛車 for(;-CarS.stacktop>findcar;CarS2.stacktop+)/將車庫
15、里面在i車外面的車移動(dòng)到臨時(shí)棧CarS2中 CarS2.homeCarS2.stacktop.carnum=CarS.homeCarS.stacktop.carnum; CarS2.homeCarS2.stacktop.time=CarS.homeCarS.stacktop.time; printf("%d號(hào)車離開停車場(chǎng)! 離開時(shí)刻: %d,停留時(shí)長(%d)n",CarS.homeCarS.stacktop.carnum,cartime,cartime-CarS.homeCarS.stacktop.time); PCar-;/車庫內(nèi)車輛-1 printf("應(yīng)付停
16、車費(fèi) %dn",(cartime-CarS.homeCarS.stacktop.time)*5); for(i=CarS2.stacktop-1;i>=0;i-)/把臨時(shí)棧里面的車移回去 CarS.homeCarS.stacktop.carnum=CarS2.homei.carnum; CarS.homeCarS.stacktop.time=CarS2.homei.time; CarS.stacktop+; CarS2.stacktop-; if(CarQ.front!=CarQ.rear)/如果候車場(chǎng)有車,將它移進(jìn)車庫 CarS.homeCarS.stacktop.carnu
17、m=CarQ.rear->carnum;/將隊(duì)列中的車牌號(hào)信息放入棧 CarS.homeCarS.stacktop.time=cartime;/將此時(shí)的時(shí)刻記錄入棧CarS,確保計(jì)算費(fèi)用是從車輛從候車場(chǎng)進(jìn)入車庫后才開始算 CarS.stacktop+; PCar+;/車庫車輛數(shù)+1 WCar-;/候車場(chǎng)車輛數(shù)-1 p=CarQ.rear; CarQ.rear=CarQ.rear->next; free(p); else/如果車庫中找不到此車,再在候車場(chǎng)找 p=CarQ.rear; if(p!=CarQ.front&&p->carnum!=carnum) /候車
18、場(chǎng)隊(duì)列不為空 f=p->next; while(f!=CarQ.front&&f->carnum!=carnum) p=f; f=f->next; if(f->carnum=carnum)/如果尋找的車在便道上,出隊(duì)列 findcar=1; p->next=f->next; printf("%d號(hào)車離開候車場(chǎng)! 離開時(shí)間: %d,停留時(shí)長(%d)n",f->carnum,cartime,cartime-f->time); WCar-; printf("應(yīng)付停車費(fèi): %dn",(cartime
19、-f->time)*0); free(f); if(p->carnum=carnum)/要離開的車在隊(duì)尾,直接出隊(duì) findcar=1; CarQ.rear=CarQ.rear->next; printf("%d號(hào)車離開候車場(chǎng)!離開時(shí)間: %d,停留時(shí)長(%d)!n",p->carnum,cartime,cartime-p->time); WCar-; printf("應(yīng)付停車費(fèi): %dn",(cartime-p->time)*0); free(p); if(findcar=-1) printf("%d號(hào)車不
20、在停車場(chǎng)中!n",carnum);6. 主函數(shù) main()printf("試驗(yàn)名稱:停車場(chǎng)管理問題n"); printf("學(xué)號(hào):n"); printf("姓名:xxn"); printf("=n"); time_t rawtime1; struct tm * timeinfo1; time (&rawtime1); timeinfo1 = localtime (&rawtime1); /時(shí)間函數(shù);printf ("程序運(yùn)行開始,當(dāng)前日期和時(shí)間: %s", ascti
21、me(timeinfo1);int go=1,carnum,cartime,MM; char carmove; CarS.stacktop=0; CarQ.rear=CarQ.front=(Node2 *)malloc(sizeof(Node2); while(go) printf("n車輛到達(dá)請(qǐng)輸入A;n車輛離開請(qǐng)輸入D;n顯示停車場(chǎng)內(nèi)車數(shù)請(qǐng)輸入P;n顯示候車場(chǎng)車數(shù)請(qǐng)輸入W;n退出程序請(qǐng)輸入E:n"); printf("n請(qǐng)輸入信息:");carmove=getchar(); printf("n"); switch(carmove)
22、 case 'A': printf("%cn車牌號(hào):t",carmove); scanf("%d",&carnum); printf("時(shí)間:t"); scanf("%d",&cartime); MM=Result(carmove,carnum,cartime); if(!MM)go=0; break; case 'D': printf("%cn車牌號(hào):t",carmove); scanf("%d",&carnum);
23、printf("現(xiàn)在時(shí)刻:t"); scanf("%d",&cartime); MM=Result(carmove,carnum,cartime); if(!MM)go=0; break; case 'W': printf("正在外通道等待的車數(shù)量是: %dn",WCar); break; case 'P': printf("車庫內(nèi)車的數(shù)量是: %dn",PCar); break; case 'E':printf("退出!n"); time
24、_t rawtime2; struct tm * timeinfo2; time (&rawtime2); timeinfo2 = localtime (&rawtime2); printf ("程序運(yùn)行結(jié)束,當(dāng)前日期和時(shí)間: %s", asctime(timeinfo2); return 0; getchar();五、調(diào)試分析 此程序是分模塊設(shè)計(jì),根據(jù)輸入的指令調(diào)用“到達(dá)”和“離開”模塊,使車的信息入棧入隊(duì),或出棧出隊(duì)。每次運(yùn)行后又返回主菜單。程序整體結(jié)構(gòu)清晰,操作方便。六、使用說明用戶根據(jù)提示輸入指令:到達(dá)輸入A,離開輸入D,顯示車庫車輛數(shù)輸入P,顯示候
25、車場(chǎng)車輛數(shù)輸入W,退出程序輸入E。輸入A后,根據(jù)提示輸入車牌號(hào)i和此時(shí)時(shí)間,將顯示“第i號(hào)車進(jìn)入車庫!時(shí)間: 位置:”或“第i號(hào)車進(jìn)入候車場(chǎng)!時(shí)間: 位置:”;輸入D后,根據(jù)提示輸入車牌號(hào)i和此時(shí)時(shí)間,將顯示“第i號(hào)車離開車庫!時(shí)間: 停留時(shí)間: 應(yīng)繳費(fèi)用:”?;颉暗趇號(hào)車離開候車場(chǎng)!時(shí)間: 停留時(shí)間: 應(yīng)繳費(fèi)用:”;輸入W后顯示“正在外通道等待的車數(shù)量是:”;輸入P后顯示“車庫內(nèi)車的數(shù)量是”;輸入E后退出程序。七、調(diào)試結(jié)果 設(shè)車庫最大容量為2.輸入一組數(shù)據(jù)進(jìn)行測(cè)試:(A,1,5),(A,2,10),(D,1,15),(A,3, 20),(A,4,25),(A,5,30),(D,2,35),(
26、D,4,40),(E,0,0)。初始界面為:輸入到達(dá)車輛:到達(dá)車輛超過車庫容量時(shí):輸入車輛離開信息:輸入P輸入W:輸入E:八 、遇到的問題和解決方法1. 開始,程序編寫完成后雖然沒有報(bào)錯(cuò),卻不能運(yùn)行,如圖經(jīng)檢查程序,將Stack *CarS; Queue *CarQ; 這兩個(gè)指針型變量改成Stack CarS; /用來表示車庫的棧Queue CarQ; /用來表示候車場(chǎng)的隊(duì)列,再次運(yùn)行發(fā)現(xiàn)可以成功運(yùn)行。2. 當(dāng)輸入上述數(shù)據(jù)后輸入P和W后顯示的車輛數(shù)不對(duì),當(dāng)車庫內(nèi)車輛離開時(shí),外通道的車進(jìn)入車庫,但PCar和WCar沒有正確跟隨變化,如圖經(jīng)檢查程序,在if(CarQ.front!=CarQ.rea
27、r)/如果候車場(chǎng)有車,將它移進(jìn)車庫 CarS.homeCarS.stacktop.carnum=CarQ.rear->carnum;/將隊(duì)列中的車牌號(hào)信息放入棧 CarS.homeCarS.stacktop.time=cartime;/將此時(shí)的時(shí)刻記錄入棧CarS,確保計(jì)算費(fèi)用是從車輛從候車場(chǎng)進(jìn)入車庫后才開始算 CarS.stacktop+; p=CarQ.rear; CarQ.rear=CarQ.rear->next; free(p);這段程序中少了 PCar+; WCar-;,加上后再次運(yùn)行,程序正確。3.計(jì)算費(fèi)用時(shí)發(fā)現(xiàn)錯(cuò)誤,在候車廳時(shí)間也被計(jì)入停車費(fèi)。經(jīng)檢查程序,將CarS.
28、homeCarS.stacktop.time=CarQ.rear->time;改成CarS.homeCarS.stacktop.time=cartime;使其計(jì)費(fèi)時(shí)間從進(jìn)入車庫開始而不是從達(dá)到候車場(chǎng)開始。再次運(yùn)行發(fā)現(xiàn)結(jié)果正確。九、實(shí)驗(yàn)收貨和感想 這是第一次運(yùn)用棧和隊(duì)列的相關(guān)知識(shí)編寫程序,開始看到這個(gè)題目感覺挑戰(zhàn)很大,從未嘗試過這么復(fù)雜的一個(gè)系統(tǒng)。停車場(chǎng)問題相較與約瑟夫斯問題要復(fù)雜得多,分了多個(gè)模塊。起初編寫時(shí)漏洞很多,好在當(dāng)框架出來后各個(gè)漏洞都可以被彌補(bǔ)。比如程序剛運(yùn)行成功時(shí),發(fā)現(xiàn)不能顯示位置,車庫車輛數(shù)和候車場(chǎng)車輛數(shù)不正確,計(jì)費(fèi)不正確等很多漏洞,但這些細(xì)節(jié)的小問題都比較容易排查修改,最
29、終終于做出了符合要求的停車場(chǎng)管理系統(tǒng)。當(dāng)完成后,我對(duì)棧和隊(duì)列的相關(guān)算法的理解也更加清晰深刻了。這個(gè)程序中還有一些靈活可變的地方,用宏定義定義了車庫容量和費(fèi)用單價(jià),使具體數(shù)字可以較為靈活的改變,增加了這個(gè)程序的使用價(jià)值。計(jì)算機(jī)實(shí)踐課程給了我動(dòng)手操作的機(jī)會(huì),使我將理論和實(shí)際操作結(jié)合起來,更好地理解算法,更快地學(xué)會(huì)編程。每次編程都感覺收獲非常多。練習(xí)的越多,對(duì)算法語句越是熟練,越能有深刻的理解,不僅幫助我更好的學(xué)習(xí)軟件技術(shù)基礎(chǔ)也為以后我們專業(yè)課的道路打好基石,對(duì)我們的邏輯能力也是很大的提升。十、源程序#include<stdio.h>#include<stdlib.h>#in
30、clude <time.h>#define MaxSize 2/車庫最大容量#define fee 10/在車庫中停車的單價(jià)typedef struct Node1 /構(gòu)建一個(gè)結(jié)構(gòu)體 int carnum; int time;Node1;typedef struct /構(gòu)造一個(gè)順序棧struct Node1 homeMaxSize; int stacktop; /棧頂?shù)闹羔楽tack;typedef struct Node2 int carnum; int time; struct Node2 *next;Node2; typedef struct /構(gòu)建一個(gè)鏈?zhǔn)疥?duì)列Node2 *
31、front,*rear;Queue; Stack CarS; /用來表示車庫的棧Queue CarQ; /用來表示候車場(chǎng)的隊(duì)列int PCar=0;/車庫里車的數(shù)量int WCar=0;/候車場(chǎng)的車的數(shù)量void Car_enter(int carnum,int cartime) /到達(dá)車輛的信息入?;蛘呷腙?duì) if(CarS.stacktop<MaxSize)/如果棧沒有滿的時(shí)候CarS.homeCarS.stacktop.carnum=carnum;/到達(dá)車輛信息放入順序棧 CarS.homeCarS.stacktop.time=cartime; PCar+;/車庫里的車數(shù)量+1 pr
32、intf("%d號(hào)車進(jìn)入停車場(chǎng)! 進(jìn)入時(shí)刻:%d 位置:%dn",CarS.homeCarS.stacktop.carnum,CarS.homeCarS.stacktop.time,PCar);CarS.stacktop+;/棧頂指針加一else /若棧滿CarQ.front->carnum=carnum; CarQ.front->time=cartime;/到達(dá)車輛信息加入到隊(duì)列中 WCar+; /候車場(chǎng)車輛數(shù)+1 printf("%d號(hào)車進(jìn)入候車場(chǎng)! 到達(dá)時(shí)刻:%d 位置:%dn",CarQ.front->carnum=carnum
33、,CarQ.front->time=cartime,WCar); CarQ.front->next=(Node2 *)malloc(sizeof(Node2);/分配空間 CarQ.front=CarQ.front->next;/更改隊(duì)列指針void Car_Leave(int carnum,int cartime)/車離開Stack CarS2;/構(gòu)造一個(gè)棧臨時(shí)存放為了讓位退出來的車 int i;int findcar=-1; Node2 *p,*f; CarS2.stacktop=0;/設(shè)臨時(shí)棧CarS2為空 for(i=0;i<CarS.stacktop;i+)
34、/通過循環(huán)對(duì)比查找要離開的車if(carnum=CarS.homei.carnum) findcar=i;/如果要尋找的車在車庫里則讓findcar等于車的號(hào)碼 break; if(findcar!= -1) /如果在車庫里找到這輛車 for(;-CarS.stacktop>findcar;CarS2.stacktop+)/將車庫里面在i車外面的車移動(dòng)到臨時(shí)棧CarS2中 CarS2.homeCarS2.stacktop.carnum=CarS.homeCarS.stacktop.carnum; CarS2.homeCarS2.stacktop.time=CarS.homeCarS.st
35、acktop.time; printf("%d號(hào)車離開停車場(chǎng)! 離開時(shí)刻: %d,停留時(shí)長(%d)n",CarS.homeCarS.stacktop.carnum,cartime,cartime-CarS.homeCarS.stacktop.time); PCar-;/車庫內(nèi)車輛-1 printf("應(yīng)付停車費(fèi) %dn",(cartime-CarS.homeCarS.stacktop.time)*5); for(i=CarS2.stacktop-1;i>=0;i-)/把臨時(shí)棧里面的車移回去 CarS.homeCarS.stacktop.carnum
36、=CarS2.homei.carnum; CarS.homeCarS.stacktop.time=CarS2.homei.time; CarS.stacktop+; CarS2.stacktop-; if(CarQ.front!=CarQ.rear)/如果候車場(chǎng)有車,將它移進(jìn)車庫 CarS.homeCarS.stacktop.carnum=CarQ.rear->carnum;/將隊(duì)列中的車牌號(hào)信息放入棧 CarS.homeCarS.stacktop.time=cartime;/將此時(shí)的時(shí)刻記錄入棧CarS,確保計(jì)算費(fèi)用是從車輛從候車場(chǎng)進(jìn)入車庫后才開始算 CarS.stacktop+; P
37、Car+;/車庫車輛數(shù)+1 WCar-;/候車場(chǎng)車輛數(shù)-1 p=CarQ.rear; CarQ.rear=CarQ.rear->next; free(p); else/如果車庫中找不到此車,再在候車場(chǎng)找 p=CarQ.rear; if(p!=CarQ.front&&p->carnum!=carnum) /候車場(chǎng)隊(duì)列不為空 f=p->next; while(f!=CarQ.front&&f->carnum!=carnum) p=f; f=f->next; if(f->carnum=carnum)/如果尋找的車在便道上,出隊(duì)列 f
38、indcar=1; p->next=f->next; printf("%d號(hào)車離開候車場(chǎng)! 離開時(shí)間: %d,停留時(shí)長(%d)n",f->carnum,cartime,cartime-f->time); WCar-; printf("應(yīng)付停車費(fèi): %dn",(cartime-f->time)*0); free(f); if(p->carnum=carnum)/要離開的車在隊(duì)尾,直接出隊(duì) findcar=1; CarQ.rear=CarQ.rear->next; printf("%d號(hào)車離開候車場(chǎng)!離開時(shí)
39、間: %d,停留時(shí)長(%d)!n",p->carnum,cartime,cartime-p->time); WCar-; printf("應(yīng)付停車費(fèi): %dn",(cartime-p->time)*0); free(p); if(findcar=-1) printf("%d號(hào)車不在停車場(chǎng)中!n",carnum);int Result(char carmove,int carnum,int cartime)/根據(jù)輸入信息完成車輛的離開或者達(dá)到switch(carmove) case 'A':Car_enter(carnum,cartime);break; case 'D':Car_Leave(carnum,cartime);break; default :printf("輸入錯(cuò)誤!n");break; return 1;main()printf("試驗(yàn)名稱:停車場(chǎng)管理問題n"
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源汽車推廣貸款協(xié)議4篇
- 二零二五年度名下公司自愿解除勞動(dòng)合同競(jìng)業(yè)禁止協(xié)議4篇
- 二零二五年度模板木枋行業(yè)聯(lián)盟采購合同3篇
- 二零二五版城市公園改造升級(jí)工程合同4篇
- 新春看消費(fèi)之家電篇:只屬于白電的狂歡
- 粘土圍堰施工方案
- 2025年綠色能源項(xiàng)目融資合作協(xié)議3篇
- 寧國無塵室設(shè)計(jì)施工方案
- 2025年度個(gè)人健身教練服務(wù)合同范本7篇
- 2025年度專業(yè)攝影車租賃合同模板(簡(jiǎn)易版)3篇
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊(cè)
- 農(nóng)發(fā)行案防知識(shí)培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024年九年級(jí)上德育工作總結(jié)
- 2024年儲(chǔ)罐呼吸閥項(xiàng)目可行性研究報(bào)告
- 控制特需醫(yī)療服務(wù)規(guī)模管理措施
- 沖擊式機(jī)組水輪機(jī)安裝概述與流程
- 新加坡SM2數(shù)學(xué)試題
- 畢業(yè)論文-水利水電工程質(zhì)量管理
評(píng)論
0/150
提交評(píng)論