實習(xí)報告4-停車場管理程序_第1頁
實習(xí)報告4-停車場管理程序_第2頁
實習(xí)報告4-停車場管理程序_第3頁
實習(xí)報告4-停車場管理程序_第4頁
實習(xí)報告4-停車場管理程序_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

暨南大學(xué)數(shù)據(jù)結(jié)構(gòu)實習(xí)報告題目:停車場模擬程序?qū)I(yè):03計機姓名:黃泳晞學(xué)號:2003402054529問題描述:設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛達(dá)到時間的先后順序,依次由北向南排列(大門在最南端,最先達(dá)到的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退車車場為它讓路,待趕輛車開出大門外,其它車輛在按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短叫納費用。試為停車場編制按上述要求進行管理的模擬程序二.算法思路(1)兩個棧和一個隊列。根據(jù)題目要求,停車場只有一個大門,因此可用一個棧來模擬:當(dāng)棧滿后,繼續(xù)來到的車輛只能停在便道上,根據(jù)便道停車的特點,可知這可以用一個隊列來模擬,先排隊的車輛先離開便道,進入停車場。由于排在停車場中間的車輛可以提出離開停車場,并且要求在離開車輛到停車場大門之間的車輛都必須先離開停車場,讓此車離開,然后讓這些車輛依原來的次序進入停車場,因此在一個棧和一個隊列的基礎(chǔ)上,還需要用一個棧來保存為了讓路離開停車場的車輛。所以本題要用兩個棧和一個隊列。(2)操作:棧:進棧:車輛進入出棧:車輛離開查找:允許排中間的車輛先離開停車場,因此需要在棧中進行查找。(3)隊列:進隊:車輛進入出隊:車輛離開查找:允許排中間的車輛先離開停車場,因此需要在隊中進行查找。三.概要設(shè)計:1.函數(shù):voidIncar()車輛x進入停車場voidOutcar()車輛x離開停車場voidDisplay()顯示停車場的狀況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{ 選擇工作項目; switch(字符) { case'1': 內(nèi)容; case'2': 內(nèi)容;while(條件) { 判斷輸入時間合法性 };調(diào)用車輛進入的函數(shù); case'3': 內(nèi)容;while(條件) { 判斷輸入時間合法性 };調(diào)用車輛離開的函數(shù); case'4': 程序結(jié)束 default: 輸入數(shù)據(jù)錯誤 } } while(條件);三.程序源代碼:#include<stdio.h>#include<stdlib.h>#include<iostream.h>#defineN2//--------停車場容量----------------#defineM0.05//--------停車場內(nèi)每分鐘單價--------#defineO0.02//--------便道每分鐘停車單價--------#defineTrue1#defineFalse0;typedefstructtime{ inthour; intmin;}Time;/*時間結(jié)點*/typedefstruct{ timehh,mm; intnum;//--------車牌號-------------------- intarrtime;//--------到達(dá)/離開時間-------------}ELEMTP;//--------順序棧的數(shù)據(jù)元素類型------typedefstruct{ ELEMTPelem[N]; inttop;}SqStack;//--------順序棧類型----------------typedefstructnode{ intnum;//--------車牌號/便道上的車輛數(shù)量--- structnode*next;}QNode;//--------鏈隊列的數(shù)據(jù)元素類型------typedefstruct{ QNode*front,*rear;}LQueue;//--------鏈隊列類型----------------voidInitStack_Sq(SqStack*s);//--------初始化棧------------------intPush_Sq(SqStack*s,ELEMTPx);//--------入棧----------------------ELEMTPPop_Sq(SqStack*s);//--------出棧----------------------voidInitQueue_L(LQueue*q);//--------初始化隊列----------------voidEnQueue_L(LQueue*q,intnum1);//--------入隊列--------------------intDelQueue_L(LQueue*q);//--------出隊列--------------------voidIncar(SqStack*s1,LQueue*q,ELEMTPx){//--------車輛x進入停車場----------- intf; f=Push_Sq(s1,x); if(f==0){//--------停車場棧s1已滿入便道q----- EnQueue_L(q,x.num); cout<<"車牌號為"<<x.num<<"的車輛停在便道第"<<q->front->num<<"號車位上"<<endl; } else cout<<"車牌號為"<<x.num<<"的車輛駛?cè)胪\噲龅?<<s1->top<<"號車位上"<<endl;};//--------Incar--------voidOutcar(SqStack*s1,SqStack*s2,LQueue*q,ELEMTPx,ELEMTPy){ doubleMoney;//--------車輛x離開停車場 intn,f,A1,A2,B1,B2; QNode*p; f=0; while((s1->top>0)&&(f!=1)){//--------在棧s1中尋找車輛x y=Pop_Sq(s1); if(y.num!=x.num)n=Push_Sq(s2,y); elsef=1; } if(y.num==x.num){//--------尋找到車輛x------ //-----------收費計算------------------ A1=x.hh.hour; A2=y.hh.hour; B1=x.mm.min; B2=y.mm.min; Money=((A1-A2)*60+B1-B2)*M; cout<<"車牌號為"<<y.num<<"的車輛收費"<<Money<<"元"<<endl; while(s2->top>0){//--------將棧s2中的車輛倒回到棧s1中-- y=Pop_Sq(s2); f=Push_Sq(s1,y); } n=DelQueue_L(q); if(n!=NULL){//--------便道q上的第一輛車入棧s1------ y.num=n; y.arrtime=x.arrtime; f=Push_Sq(s1,y); cout<<"便道上車牌為"<<y.num<<"的車輛駛?cè)胪\噲龅?<<s1->top<<"號車位上\n"<<endl; } } else{//--------棧s1中未找到車輛x-------------- while(s2->top>0){//--------將棧s2中的車輛倒回到棧s1中----- y=Pop_Sq(s2); f=Push_Sq(s1,y); } p=q->front;//--------在便道q上找到車輛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<<"車牌號為"<<x.num<<"的車輛收費"<<Money<<"元"<<endl; f=1; } if(f==0) cout<<"輸入數(shù)據(jù)錯誤,停車場和便道上均無"<<x.num<<"號車"<<endl; }}//--------Outcar--------voidDisplay(SqStack*s1,LQueue*q){//--------顯示停車場的狀況-------- intk;QNode*p; cout<<"停車場狀況:"<<endl; if(s1->top!=0){ cout<<"車位車牌"<<endl; for(k=0;k<s1->top;k++) cout<<""<<k+1<<""<<s1->elem[k].num<<endl; } elsecout<<"停車場沒有車輛"<<endl; cout<<"便道狀況:"<<endl; if(q->front->num){ cout<<"車位車牌"<<endl; for(k=1,p=q->front->next;p;p=p->next) cout<<""<<k++<<""<<p->num<<endl; } elsecout<<"便道沒有車輛"<<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<<"-----------------------停車場管理程序----------------------\n"; do{ cout<<"1--查看停車場狀況2--車輛到達(dá)3--車輛離開4--程序結(jié)束\n"; cout<<"請選擇:"; cin>>ch1; switch(ch1) { case'1': Display(s1,q);cout<<"---------------------------------------------------------------\n"; break; case'2': cout<<"輸入車牌號:"; cin>>x.num; cout<<"輸入時間(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"輸入到達(dá)時間(小時:分鐘)"; cin>>x.hh.hour; cin>>ch2; }; while(ch2!=':'); cin>>x.mm.min; Incar(s1,q,x); cout<<"---------------------------------------------------------------\n"; break; case'3': cout<<"輸入車牌號:"; cin>>x.num; cout<<"輸入離開時間(hh:mm)"; cin>>x.hh.hour; cin>>ch2;while(ch2!=':') { cout<<"輸入離開時間(小時:分鐘)"; 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ù)錯誤,重新輸入"<<"\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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論