版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
暨南大學(xué)數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告題目:停車(chē)場(chǎng)模擬程序?qū)I(yè):03計(jì)機(jī)姓名:黃泳晞學(xué)號(hào):2003402054529問(wèn)題描述:設(shè)停車(chē)場(chǎng)是一個(gè)可停放n輛汽車(chē)的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車(chē)進(jìn)出。汽車(chē)在停車(chē)場(chǎng)內(nèi)按車(chē)輛達(dá)到時(shí)間的先后順序,依次由北向南排列(大門(mén)在最南端,最先達(dá)到的第一輛車(chē)停放在車(chē)場(chǎng)的最北端),若車(chē)場(chǎng)內(nèi)已停滿n輛汽車(chē),則后來(lái)的汽車(chē)只能在門(mén)外的便道上等候,一旦有車(chē)開(kāi)走,則排在便道上的第一輛車(chē)即可開(kāi)入;當(dāng)停車(chē)場(chǎng)內(nèi)某輛車(chē)要離開(kāi)時(shí),在它之后進(jìn)入的車(chē)輛必須先退車(chē)車(chē)場(chǎng)為它讓路,待趕輛車(chē)開(kāi)出大門(mén)外,其它車(chē)輛在按原次序進(jìn)入車(chē)場(chǎng),每輛停放在車(chē)場(chǎng)的車(chē)在它離開(kāi)停車(chē)場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短叫納費(fèi)用。試為停車(chē)場(chǎng)編制按上述要求進(jìn)行管理的模擬程序二.算法思路(1)兩個(gè)棧和一個(gè)隊(duì)列。根據(jù)題目要求,停車(chē)場(chǎng)只有一個(gè)大門(mén),因此可用一個(gè)棧來(lái)模擬:當(dāng)棧滿后,繼續(xù)來(lái)到的車(chē)輛只能停在便道上,根據(jù)便道停車(chē)的特點(diǎn),可知這可以用一個(gè)隊(duì)列來(lái)模擬,先排隊(duì)的車(chē)輛先離開(kāi)便道,進(jìn)入停車(chē)場(chǎng)。由于排在停車(chē)場(chǎng)中間的車(chē)輛可以提出離開(kāi)停車(chē)場(chǎng),并且要求在離開(kāi)車(chē)輛到停車(chē)場(chǎng)大門(mén)之間的車(chē)輛都必須先離開(kāi)停車(chē)場(chǎng),讓此車(chē)離開(kāi),然后讓這些車(chē)輛依原來(lái)的次序進(jìn)入停車(chē)場(chǎng),因此在一個(gè)棧和一個(gè)隊(duì)列的基礎(chǔ)上,還需要用一個(gè)棧來(lái)保存為了讓路離開(kāi)停車(chē)場(chǎng)的車(chē)輛。所以本題要用兩個(gè)棧和一個(gè)隊(duì)列。(2)操作:棧:進(jìn)棧:車(chē)輛進(jìn)入出棧:車(chē)輛離開(kāi)查找:允許排中間的車(chē)輛先離開(kāi)停車(chē)場(chǎng),因此需要在棧中進(jìn)行查找。(3)隊(duì)列:進(jìn)隊(duì):車(chē)輛進(jìn)入出隊(duì):車(chē)輛離開(kāi)查找:允許排中間的車(chē)輛先離開(kāi)停車(chē)場(chǎng),因此需要在隊(duì)中進(jìn)行查找。三.概要設(shè)計(jì):1.函數(shù):voidIncar()車(chē)輛x進(jìn)入停車(chē)場(chǎng)voidOutcar()車(chē)輛x離開(kāi)停車(chē)場(chǎng)voidDisplay()顯示停車(chē)場(chǎng)的狀況2.一系列算法:intDelQueue_L(LQueue*q)voidEnQueue_L(LQueue*q,intnum1)voidInitQueue_L(LQueue*q)ELEMTPPop_Sq(SqStack*s)intPush_Sq(SqStack*s,ELEMTPx)voidInitStack_Sq(SqStack*s)3.主程序:main(){ 初始化; do{ 選擇工作項(xiàng)目; switch(字符) { case'1': 內(nèi)容; case'2': 內(nèi)容;while(條件) { 判斷輸入時(shí)間合法性 };調(diào)用車(chē)輛進(jìn)入的函數(shù); case'3': 內(nèi)容;while(條件) { 判斷輸入時(shí)間合法性 };調(diào)用車(chē)輛離開(kāi)的函數(shù); case'4': 程序結(jié)束 default: 輸入數(shù)據(jù)錯(cuò)誤 } } while(條件);三.程序源代碼:#include<stdio.h>#include<stdlib.h>#include<iostream.h>#defineN2//--------停車(chē)場(chǎng)容量----------------#defineM0.05//--------停車(chē)場(chǎng)內(nèi)每分鐘單價(jià)--------#defineO0.02//--------便道每分鐘停車(chē)單價(jià)--------#defineTrue1#defineFalse0;typedefstructtime{ inthour; intmin;}Time;/*時(shí)間結(jié)點(diǎn)*/typedefstruct{ timehh,mm; intnum;//--------車(chē)牌號(hào)-------------------- intarrtime;//--------到達(dá)/離開(kāi)時(shí)間-------------}ELEMTP;//--------順序棧的數(shù)據(jù)元素類(lèi)型------typedefstruct{ ELEMTPelem[N]; inttop;}SqStack;//--------順序棧類(lèi)型----------------typedefstructnode{ intnum;//--------車(chē)牌號(hào)/便道上的車(chē)輛數(shù)量--- structnode*next;}QNode;//--------鏈隊(duì)列的數(shù)據(jù)元素類(lèi)型------typedefstruct{ QNode*front,*rear;}LQueue;//--------鏈隊(duì)列類(lèi)型----------------voidInitStack_Sq(SqStack*s);//--------初始化棧------------------intPush_Sq(SqStack*s,ELEMTPx);//--------入棧----------------------ELEMTPPop_Sq(SqStack*s);//--------出棧----------------------voidInitQueue_L(LQueue*q);//--------初始化隊(duì)列----------------voidEnQueue_L(LQueue*q,intnum1);//--------入隊(duì)列--------------------intDelQueue_L(LQueue*q);//--------出隊(duì)列--------------------voidIncar(SqStack*s1,LQueue*q,ELEMTPx){//--------車(chē)輛x進(jìn)入停車(chē)場(chǎng)----------- intf; f=Push_Sq(s1,x); if(f==0){//--------停車(chē)場(chǎng)棧s1已滿入便道q----- EnQueue_L(q,x.num); cout<<"車(chē)牌號(hào)為"<<x.num<<"的車(chē)輛停在便道第"<<q->front->num<<"號(hào)車(chē)位上"<<endl; } else cout<<"車(chē)牌號(hào)為"<<x.num<<"的車(chē)輛駛?cè)胪\?chē)場(chǎng)第"<<s1->top<<"號(hào)車(chē)位上"<<endl;};//--------Incar--------voidOutcar(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx,ELEMTPy){ doubleMoney;//--------車(chē)輛x離開(kāi)停車(chē)場(chǎng) intn,f,A1,A2,B1,B2; QNode*p; f=0; while((s1->top>0)&&(f!=1)){//--------在棧s1中尋找車(chē)輛x y=Pop_Sq(s1); if(y.num!=x.num)n=Push_Sq(s2,y); elsef=1; } if(y.num==x.num){//--------尋找到車(chē)輛x------ //-----------收費(fèi)計(jì)算------------------ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; Money=((A1-A2)*60+B1-B2)*M; cout<<"車(chē)牌號(hào)為"<<y.num<<"的車(chē)輛收費(fèi)"<<Money<<"元"<<endl; while(s2->top>0){//--------將棧s2中的車(chē)輛倒回到棧s1中-- y=Pop_Sq(s2); f=Push_Sq(s1,y); } n=DelQueue_L(q); if(n!=NULL){//--------便道q上的第一輛車(chē)入棧s1------ y.num=n; y.arrtime=x.arrtime; f=Push_Sq(s1,y); cout<<"便道上車(chē)牌為"<<y.num<<"的車(chē)輛駛?cè)胪\?chē)場(chǎng)第"<<s1->top<<"號(hào)車(chē)位上\n"<<endl; } } else{//--------棧s1中未找到車(chē)輛x-------------- while(s2->top>0){//--------將棧s2中的車(chē)輛倒回到棧s1中----- y=Pop_Sq(s2); f=Push_Sq(s1,y); } p=q->front;//--------在便道q上找到車(chē)輛x-------------- f=0; while(f==0&&p->next!=NULL) if(p->next->num!=x.num) p=p->next; else{ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; p->next=p->next->next; q->front->num--; if(p->next==NULL) q->rear=q->front; cout<<A1<<endl; cout<<A2<<endl; cout<<B1<<endl; cout<<B2<<endl; Money=((A1-A2)*60+B1-B2)*O; cout<<"車(chē)牌號(hào)為"<<x.num<<"的車(chē)輛收費(fèi)"<<Money<<"元"<<endl; f=1; } if(f==0) cout<<"輸入數(shù)據(jù)錯(cuò)誤,停車(chē)場(chǎng)和便道上均無(wú)"<<x.num<<"號(hào)車(chē)"<<endl; }}//--------Outcar--------voidDisplay(SqStack*s1,LQueue*q){//--------顯示停車(chē)場(chǎng)的狀況-------- intk;QNode*p; cout<<"停車(chē)場(chǎng)狀況:"<<endl; if(s1->top!=0){ cout<<"車(chē)位車(chē)牌"<<endl; for(k=0;k<s1->top;k++) cout<<""<<k+1<<""<<s1->elem[k].num<<endl; } elsecout<<"停車(chē)場(chǎng)沒(méi)有車(chē)輛"<<endl; cout<<"便道狀況:"<<endl; if(q->front->num){ cout<<"車(chē)位車(chē)牌"<<endl; for(k=1,p=q->front->next;p;p=p->next) cout<<""<<k++<<""<<p->num<<endl; } elsecout<<"便道沒(méi)有車(chē)輛"<<endl;}//--------Display--------voidmain(){ charch1,ch2; SqStack*s1,*s2; LQueue*q; ELEMTPx,y; s1=(SqStack*)malloc(sizeof(SqStack)); s2=(SqStack*)malloc(sizeof(SqStack)); q=(LQueue*)malloc(sizeof(LQueue)); InitStack_Sq(s1); InitStack_Sq(s2); InitQueue_L(q); cout<<"-----------------------停車(chē)場(chǎng)管理程序----------------------\n"; do{ cout<<"1--查看停車(chē)場(chǎng)狀況2--車(chē)輛到達(dá)3--車(chē)輛離開(kāi)4--程序結(jié)束\n"; cout<<"請(qǐng)選擇:"; cin>>ch1; switch(ch1) { case'1': Display(s1,q);cout<<"---------------------------------------------------------------\n"; break; case'2': cout<<"輸入車(chē)牌號(hào):"; cin>>x.num; cout<<"輸入時(shí)間(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"輸入到達(dá)時(shí)間(小時(shí):分鐘)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2!=':'); cin>>x.mm.min; Incar(s1,q,x); cout<<"---------------------------------------------------------------\n"; break; case'3': cout<<"輸入車(chē)牌號(hào):"; cin>>x.num; cout<<"輸入離開(kāi)時(shí)間(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"輸入離開(kāi)時(shí)間(小時(shí):分鐘)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2!=':'); cin>>x.mm.min; Outcar(s1,s2,q,x,y); cout<<"---------------------------------------------------------------\n"; break; case'4': cout<<"程序結(jié)束"<<endl; break; default: cout<<"輸入數(shù)據(jù)錯(cuò)誤,重新輸入"<<"\n\n\n"; cout<<"---------------------------------------------------------------\n"; break; cin>>ch1; } } while(ch1!='4');}//--------main--------voidInitStack_Sq(SqStack*s){ s->top=0;}intPush_Sq(SqStack*s,ELEMTPx){ if(s->top==N) return(0); else { s->elem[s->top]=x;s->top++; return(1); }}ELEMTPPop_Sq(SqStack*s){ ELEMTPx; if(s->top==0) { x.num=NULL; x.arrtime=NULL; return(x); } else { s->top--; return(s->elem[s->
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同行競(jìng)爭(zhēng)協(xié)議合同范本
- 2025年度企業(yè)自駕游租車(chē)合同二零二五年度專(zhuān)用3篇
- 2025版建筑起重機(jī)械租賃價(jià)格體系構(gòu)建及質(zhì)量控制合同3篇
- 2025年度個(gè)人土地承包權(quán)流轉(zhuǎn)保證金合同范本3篇
- 2025年全球及中國(guó)高效微??諝膺^(guò)濾器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球陽(yáng)極氧化再生行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年拉絲工職業(yè)技能競(jìng)賽理論考試題庫(kù)(含答案)
- 2025年度個(gè)人租賃房屋租賃合同租賃物損壞賠償條款
- 二零二五年度車(chē)庫(kù)使用權(quán)抵押貸款合同4篇
- 2025年度個(gè)人旅游保險(xiǎn)代理合同6篇
- 2024年安全教育培訓(xùn)試題附完整答案(奪冠系列)
- 神農(nóng)架研學(xué)課程設(shè)計(jì)
- 文化資本與民族認(rèn)同建構(gòu)-洞察分析
- 2025新譯林版英語(yǔ)七年級(jí)下單詞默寫(xiě)表
- 【超星學(xué)習(xí)通】馬克思主義基本原理(南開(kāi)大學(xué))爾雅章節(jié)測(cè)試網(wǎng)課答案
- 《錫膏培訓(xùn)教材》課件
- 斷絕父子關(guān)系協(xié)議書(shū)
- 福建省公路水運(yùn)工程試驗(yàn)檢測(cè)費(fèi)用參考指標(biāo)
- 2024年中國(guó)工業(yè)涂料行業(yè)發(fā)展現(xiàn)狀、市場(chǎng)前景、投資方向分析報(bào)告(智研咨詢發(fā)布)
- 自然科學(xué)基礎(chǔ)(小學(xué)教育專(zhuān)業(yè))全套教學(xué)課件
- 《工程勘察資質(zhì)分級(jí)標(biāo)準(zhǔn)和工程設(shè)計(jì)資質(zhì)分級(jí)標(biāo)準(zhǔn)》
評(píng)論
0/150
提交評(píng)論