




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、設停車場是一個可停放n輛車的狹長通道,且只有一個大門可供汽車進出。在停 車場內,汽車按到達的先后次序,由北向南依次排列(假設大門在最南端)。若 車場內已停滿n輛車,則后來的汽車要在門外的便道上等候, 當有車開走時,便 道上的第一輛車即可開入。當停車場內某輛車要離開時,在它之后進去的車輛必 須先推出車場為它讓路,待該輛車開出大門以后,其他車輛再按原次序返回車場。 每輛車離開停車場時,應按其停留時間的長短交費(在便道上停留的時間不收 費)。試編寫程序,模擬上述管理過程。要求以順序棧模擬停車場,以鏈隊列模 擬便道。從終端讀入汽車到達或離去的數據,每組數據包括三項:(1)是“到達” 還是“離去” (2
2、)汽車牌照號碼;(3) “到達”或“離去”的時刻。與每組輸入信 息相應的輸出信息為:如果是到達的車輛,則輸出其在停車場中或便道上的位置; 如果是離去的車輛,則輸出其在停車場中停留的時間和應繳的費用。(需另設一 個棧,臨時停放為讓路而從車場退出的車。) #include #define M 5 using namespace std; typedef int Datatype; typedef struct Datatype bianhaoM; 時 分 秒 停車場棧的定義 便道結點,表示一輛汽車 int top; int hM;/ int mM;/ int sM;/ Seqstack;/ typ
3、edef struct Node / Datatype bianhao; struct Node *next; node; typedef struct node *front; node *rear; int count; biandao;/便道 /停車場順序棧初始化 void lnitSeqstack(Seqstack *t) t-top=-1; /進棧,即進入停車場 int Push(Seqstack *t,int x,int h,int m,int s) if(t-top=M-1) return 0;/停車場棧已滿 t-top+; t-bianhaot-top=x; t-ht-top=
4、h; t-mt-top=m; t-st-top=s; return 1; /出棧,即離開停車場 int Pop(Seqstack *t,int *x,int *h,int *m,int *s) if(t-top=-1) return 0; else *x=t-bianhaot-top; *h=t-ht-top; *m=t-mt-top; *s=t-st-top; t-top-; return 1; /查找某牌照的車在停車場中的位置,若找到則返回其位 置,否則返回-1 int Find(Seqstack t,int x) int i; for(i=0;iv=t.top;i+) if(t.bian
5、haoi!=x) continue; else break; if(it.top) return(-1); else return(i); /判斷停車場內是否已滿 int lsSeqstackFull(Seqstack t) if(t.top=M-1) return 1; else return 0; /判斷停車場內是否已沒有車輛 int lsSeqstackEmpty(Seqstack t) if(t.top=-1) return 1; else return 0; /依次顯示停車場內停放的所有車輛 void ShowSeqstack(Seqstack t) int i; if(t.top=
6、-1) coutvv停車場內沒有停放車輛vvendl; else for(i=0;ifront=new node; if(Q- front!=NULL) Q-rear=Q-fr ont; Q-front-next=NULL; Q-count=0; return(true); else return(false); /入隊操作,即當停車場滿了的時候,再到達的車輛進去便 道隊列 int Enterbiandao(biandao *Q,int x) node *NewNode; NewNode=new node; if(NewNode!=NULL) NewNode-bianhao=x; NewNod
7、e-next=NULL; Q-rear-next=NewNode; Q-rear=NewNode; Q-co un t+; return(true); else return(false); /出隊操作,即便道上的車輛從便道開出來 int Deletebiandao(biandao *Q,int *x) node *p; if(Q-fro nt=Q-rear) return(false); p=Q-front-next; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-fr ont; *x=p-bianhao; free(p); Q-count-; ret
8、urn(true); /判斷便道隊列是否為空 int lsbiandaoEmpty(biandao Q) if(Q.front=Q.rear) return(true); else return(false); / 當count=0時,就空了 /依次顯示便道上停放的所有車輛 void Showbiandao(biandao Q) node *p; p=Q.front-next; if(p=NULL) coutvv便道上沒有停放車輛!vvendl; else while(p!=NULL) coutvv 牌照:vvp-bianhaovvendl; p=p-n ext; 36 /計算停留時間差 do
9、uble Time(int h1,int m1,int s1,int h2,int m2,int s2) double p,q; p=h1*3600+m1*60+s1 -(h2*3600+m2*60+s2); q=(double)p/3600; return(q); /計算停車費用 double Cost(double t,int u) return(t*u); /主函數 void main() double time,cost; int ch; int x,*y, z; int i,flag=1,h,m,s,unit_price,hh,mm,ss; y=new int; Seqstack *
10、t; / 定義停車 棧 t=new Seqstack; InitSeqstack(t); biandao *Q; / 定義便道隊列 Q=new biandao; Initbiandao(Q); Seqstack *r; / 定義讓路 棧 r=new Seqstack; InitSeqstack(r); coutvv請設置停車費用單價:(_元/小時)vvendl; cinunit_price; while(flag) coutvv H* vvendl; vvendlvv2: 離開vvendlvv3:依次顯示停車場內停放車 coutvv H* vvendl; coutvv 請選 擇命令:vvend
11、lvv1: 輛vvendlvv4:依次顯示便道上停放車輛ch; switch(ch) case 1: coutvv 請輸入到達的汽車牌照號碼:vvendl; cinx; if(lsSeqstackFull(*t) coutvv 停車場已滿,請在便道等候!vvendl; Enterbiandao(Q,x); coutvv將此車停放在便道的vvQ-countvv 號位置!vvendl; else while(1) coutvv請輸入到達的時間(例如,21 08 23) : vvendl; cinhms; if(hv0 |h23) continue; /輸入數據不合法,回去重新輸入 if (mv0
12、| m59) continue; if (s-1 /輸入時間全部合法,退出循環 Push(t,x,h,m,s); coutvv 將此車停放在停車場的 vvt-top+1vv 號停車位置vvendl; break; case 2: if(lsSeqstackEmpty(*t) coutvv 停車場內已沒有車輛 vvendl; else coutvv請輸入要離開的汽車的車牌照號碼: vvendl; cinx; if(Find(*t,x)=-1) coutvv停車場內沒有該汽車!vvendl; else /有該號碼的汽車 while coutvv請輸入離開的時間(例如,23 58 03) : vve
13、ndl; cinhms; if(h23) continue; /輸入數據不合法,回去重新輸入 if (m59) continue; if (s-1 /要離開的車輛正好是最后一輛進入停車場的車 time=Time(h,m,s,hh,mm,ss); coutvv停留時間為:vvtimevv小 時vvendl; / 結賬 cost=Cost(time,unit_price); coutvv應繳費 用為:vvcostvv 元 vvendl; else for(i=(Find(*t,x)+1);iv=t-top;)該車不是最后一 輛進入停車場的車,其它車要讓路 Pop(t,y, Push(r,*y,hh,mm,ss); / 進入讓路棧r Pop(t,y, /要離開的車輛離開了 vvtimevv小 vvcostvv元 time=Time(h,m,s,hh,mm,ss); coutvv停留時間為: 時vvendl; / 結賬 cost=Cost(time,unit_price); coutvv應繳費用為: vvendl; for(i=0;iv=r-top;) /讓路 的車輛重新回到停車場 Pop(r,y, Push(t,*y,hh,mm,ss); if(!lsbiandaoEmpty(*Q) Deletebianda
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園游戲化教學的課程設計與實施效果分析
- 跨國餐飲品牌入駐合作協議范本
- 金融服務代辦服務合同模板
- 推進美麗河湖保護與建設的策略及實施路徑
- 公司聚集開會活動方案
- 公司美食探店活動方案
- 公司組織護外團建活動方案
- 公司畢業生入職活動方案
- 公司舞臺策劃方案
- 摩托預訂協議書范本
- 義務教育英語課程標準(2022年版)
- 荊州中學2024-2025高二學年下學期6月月考 英語答案
- 2018-2022北京高中合格考生物匯編:基因的表達
- 2025至2030中國IT運維管理行業發展趨勢分析與未來投資戰略咨詢研究報告
- 新生兒病區專科理論考試題庫
- 健康評估咳嗽咳痰課件
- 白酒酒店合作合同協議書
- 中國融通農業發展有限集團有限公司招聘筆試題庫2025
- 實驗室通風系統工程施工方案
- 2024淮安市專業技術人員繼續教育試題參考答案
- 成人體外膜肺氧合循環輔助護理專家共識-解讀與臨床應用(2025版)
評論
0/150
提交評論