版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p><b> 項 目: </b></p><p><b> 專 業(yè): </b></p><p><b> 班 級: </b></p><p> 學(xué) 號: </p><
2、;p> 姓 名: </p><p><b> 指導(dǎo)老師: </b></p><p> 2006~2007學(xué)年第二學(xué)期</p><p><b> 一 、問題描述:</b></p><p> 有一個渡口,每條渡輪一次能裝載10輛汽車過江,過江車輛分為客車和貨車兩類,上
3、渡輪有如下規(guī)定:</p><p> 同類汽車先到先上船。</p><p><b> 客車先與貨車上船。</b></p><p> 每上4輛客車才允許上一輛貨車,但若等待的客車不足4輛則用貨車填補,反過來,若沒有貨車等待則用客車填補。</p><p> 裝滿10輛后則自動開船,當?shù)却龝r間較長時車輛不足10輛也應(yīng)人為
4、控制發(fā)船。</p><p><b> 二 、算法思想:</b></p><p> 此問題應(yīng)建立和使用兩個隊列,一個為客車隊列,另一個為貨車隊列,到渡口需過江的汽車分別進入到相應(yīng)隊列中。當渡口有渡輪時先讓客車隊列中的4個車輛出隊并開進渡輪,再讓貨車隊列中的一個車輛出隊并開進渡輪,若某一類車輛隊列為空則從另一個隊列中補充。當渡輪上的車輛已滿則自動開船,此時應(yīng)打印出已裝
5、車輛的每個車號。若裝載不足10輛,但兩個車輛隊列全為空,應(yīng)繼續(xù)等待一段時間,若等待時間較長,仍不滿載則應(yīng)人為控制開船。</p><p><b> 三 、基本要求:</b></p><p> 總體原則是客車優(yōu)先于貨車,比例為4:1,但能根據(jù)實際情況,靈活調(diào)整裝載的汽車以及發(fā)船的控制。</p><p><b> 四 、模塊劃分:&l
6、t;/b></p><p><b> (1)流程圖</b></p><p> 1 2 3 4 5 6</p><p> ?。?)具體應(yīng)用模塊:</p><p> 1.隊列的相關(guān)運算:(存于單獨源文件“鏈式隊列.cpp”
7、中)</p><p> void InitQueue(LinkQueue& Q)//初始化隊列</p><p> void EnQueue(LinkQueue& Q,ElemType item)//向隊列中插入一個元素</p><p> ElemType OutQueue(LinkQueue& Q)//從隊列中刪除一個元素</
8、p><p> void ClearQueue(LinkQueue& Q)//清除隊列中的所有元素,使之變成空隊</p><p> bool EmptyQueue(LinkQueue& HQ)//檢查隊列是否為空</p><p> 2.渡輪輸出相關(guān)模塊:</p><p> void Print(int a[],int n
9、) //輸出本次輪渡所載汽車編號</p><p> void OutputQueue(const LinkQueue& q1,const LinkQueue& q2)</p><p> //輸出汽車排隊等待的情況</p><p><b> 五 、數(shù)據(jù)結(jié)構(gòu):</b></p><p> 建立兩個鏈
10、接隊列,一個為客車隊列,另一個為貨車隊列,到渡口需過江的汽車分別進入到相應(yīng)隊列中。</p><p><b> 鏈接隊列的定義為:</b></p><p> struct LinkQueue</p><p><b> {</b></p><p> LNode* front;//隊首指
11、針</p><p> LNode* rear;//隊尾指針</p><p><b> };</b></p><p> 主函數(shù)中使用switch()函數(shù),將功能表中的六種選擇分別表示為case1~case6。</p><p><b> 具體表示:</b></p><
12、;p> swtch(flag)//falg為輸入的功能序號</p><p> case1://車到渡口進行登記</p><p><b> …</b></p><p> case2://輪渡到渡口進行登記</p><p><b> …</b></p><p&g
13、t; case3://汽車上輪渡</p><p><b> …</b></p><p> case4://命令輪渡起航</p><p><b> …</b></p><p> case5: //輸出當前汽車排隊情況</p><p><b> …&l
14、t;/b></p><p> case6:// 結(jié)束程序運行</p><p><b> … </b></p><p><b> 六 、源程序:</b></p><p><b> 鏈式隊列.cpp</b></p><p> void In
15、itQueue(LinkQueue& Q)//初始化隊列</p><p><b> {</b></p><p> Q.front=Q.rear=NULL;</p><p><b> }</b></p><p> void EnQueue(LinkQueue& Q,ElemT
16、ype item)//向隊列中插入一個元素</p><p><b> {</b></p><p> LNode *newptr=new LNode();</p><p> newptr->data=item;</p><p> newptr->next=NULL;</p><p&g
17、t; if(Q.rear==NULL)//若隊列為空,則新結(jié)點既是隊首又是隊尾</p><p> Q.front=Q.rear=newptr;</p><p> Q.rear->next=newptr;//若隊列非空,則新結(jié)點被鏈接到隊尾</p><p> Q.rear=newptr;</p><p><
18、b> }</b></p><p> ElemType OutQueue(LinkQueue& Q)//從隊列中刪除一個元素</p><p><b> {</b></p><p> if(Q.front==NULL)//若隊列為空則終止運行</p><p><b> {
19、</b></p><p> cout<<"Empty!"<<endl;</p><p><b> exit(1);</b></p><p><b> }</b></p><p> LNode *p;//暫存隊首元素以便返回&l
20、t;/p><p> p=Q.front;//暫存隊首指針以便回收隊首結(jié)點</p><p> ElemType a=p->data;//使隊首指針指向下一個結(jié)點</p><p> Q.front=p->next;//若刪除后隊列為空,則使隊尾指針為空</p><p> if(Q.front==NULL)&l
21、t;/p><p> Q.rear=NULL;</p><p><b> delete p;</b></p><p> return a;//返回刪除的隊首元素</p><p><b> }</b></p><p> void ClearQueue(LinkQu
22、eue& Q)//清除隊列中的所有元素,使之變成空隊</p><p><b> {</b></p><p> LNode *b;//對首時針賦給p</p><p> b=Q.front;</p><p> while(Q.front!=NULL)//依次刪除隊列中的每個元素</p&g
23、t;<p><b> {</b></p><p> Q.front=b->next;</p><p><b> delete b;</b></p><p> b=Q.front;</p><p><b> }</b></p><
24、p> Q.rear=NULL;//置隊尾指針為空</p><p><b> }</b></p><p> bool EmptyQueue(LinkQueue& HQ)//檢查隊列是否為空</p><p><b> {</b></p><p> return HQ.f
25、ront==NULL;</p><p><b> }</b></p><p><b> 輪渡.cpp</b></p><p> #include<iostream.h></p><p> #include<stdlib.h></p><p>
26、 #include<time.h>//此頭文件包含有上time函數(shù)和ctime函數(shù)的</p><p> typedef int ElemType;</p><p> struct LNode{</p><p> ElemType data;//值域</p><p> LNode* next;/
27、/鏈接指針域</p><p><b> };</b></p><p> struct LinkQueue</p><p><b> {</b></p><p> LNode* front;//隊首指針</p><p> LNode* rear;/
28、/隊尾指針</p><p><b> };</b></p><p> #include"鏈接隊列.cpp"</p><p> //輸出本次輪渡所載汽車編號</p><p> void Print(int a[],int n)</p><p><b> {&l
29、t;/b></p><p><b> long t;</b></p><p> t=time(0);//當前機器系統(tǒng)時間被保存到t中,單位為秒</p><p> cout<<endl;</p><p> cout<<"輪渡開始起航->"<<end
30、l;</p><p> cout<<"本次過江的時間:"<<ctime(&t)<<endl;</p><p> //ctime(&t)函數(shù)的值為根據(jù)參數(shù)t轉(zhuǎn)換得到的日期和時間的字符串</p><p> cout<<"本次輪渡所載汽車:";</p>
31、<p> for(int i=0;i<n;i++)cout<<a[i]<<' ';</p><p> cout<<endl;</p><p><b> }</b></p><p> //輸出汽車排隊等待的情況</p><p> void O
32、utputQueue(const LinkQueue& q1,const LinkQueue& q2)</p><p><b> {</b></p><p> cout<<"客車等候的情況:";</p><p> LNode* p=q1.front;</p><p>
33、 if(p==NULL)cout<<"暫時無客車等候."<<endl;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> cout<<p->data<<' ';</p><p
34、> p=p->next;</p><p><b> }</b></p><p> cout<<endl;</p><p> cout<<"貨車排隊的情況:";</p><p> p=q2.front;</p><p> if(p=
35、=NULL)cout<<"暫時無貨車等候."<<endl;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> cout<<p->data<<' ';</p><p> p
36、=p->next;</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p> void main()</p><p><b> {</b></
37、p><p> //q1和q2隊列用來分別存儲待渡江的客車和貨車</p><p> LinkQueue q1,q2;</p><p> //對q1和q2進行初始化</p><p> InitQueue(q1);</p><p> InitQueue(q2);</p><p> //用fla
38、g保存用戶選擇,用mark登記輪渡到渡口</p><p> int flag,mark=0;</p><p> //用數(shù)組a記錄輪渡上的每個汽車號,用n記錄汽車的個數(shù)</p><p> int a[10],n=0;</p><p> // 用t1和t2登記時間</p><p> long t1,t2;<
39、/p><p><b> //程序處理結(jié)果</b></p><p><b> do</b></p><p><b> {</b></p><p> //顯示功能表并接受用戶選擇</p><p> L1:cout<<"功能表:&q
40、uot;<<endl;</p><p> cout<<"1---車到渡口進行登記"<<endl;</p><p> cout<<"2---輪渡到渡口進行登記"<<endl;</p><p> cout<<"3---汽車上輪渡"&l
41、t;<endl;</p><p> cout<<"4---命令輪渡起航"<<endl;</p><p> cout<<"5---輸出當前汽車排隊情況"<<endl;</p><p> cout<<"6---結(jié)束程序運行"<<
42、endl<<endl;</p><p> cout<<"請輸入你的選擇(1-6):";</p><p><b> do</b></p><p><b> {</b></p><p> cin>>flag;</p><
43、p> if(flag<1||flag>6)cout<<"輸入功能號錯,重輸:";</p><p> }while(flag<1||flag>6);</p><p><b> int x,i;</b></p><p> //根據(jù)不同選擇進行相應(yīng)處理</p><
44、;p> switch(flag){</p><p><b> case 1:</b></p><p> cout<<"輸入車輛號,假定小于100為客車,否則為貨車,"<<endl;</p><p> cout<<"可以輸入多輛車,用空格分開,直到輸入-1為止。&qu
45、ot;<<endl;</p><p><b> while(1){</b></p><p><b> cin>>x;</b></p><p> if(x==-1)break;</p><p> if(x<100)EnQueue(q1,x);//客車進q1隊<
46、;/p><p> else EnQueue(q2,x);//貨車進q2隊</p><p><b> }</b></p><p> break;//結(jié)束switch語句</p><p><b> case 2:</b></p><p> if(mark==1){&
47、lt;/p><p> cout<<"渡輪已在渡口等待,不要重復(fù)登記!"<<endl;</p><p> break;//結(jié)束switch語句</p><p><b> }</b></p><p> mark=1;//渡輪到口岸登記</p><
48、;p> cout<<"渡輪已到渡口,可以上船!"<<endl;</p><p> n=0;//裝載車輛數(shù)初始為0;</p><p> t1=time(0);//登記渡輪到渡口時間,單位為秒</p><p> break;//結(jié)束switch語句</p><p><
49、;b> case 3:</b></p><p> if(EmptyQueue(q1) && EmptyQueue(q2)){</p><p> cout<<"暫無汽車過江!"<<endl;</p><p> if(mark==1 && n!=0){</p>
50、;<p> t2=time(0)-t1;//計算到目前為止渡輪等待時間的秒數(shù)</p><p> cout<<"輪渡未滿,有車"<<n<<"輛,已等待"<<t2/60<<"分";</p><p> cout<<t2%60<<&
51、quot;秒,等候其他汽車上渡輪!"<<endl;</p><p><b> }</b></p><p> break;//結(jié)束switch語句</p><p><b> }</b></p><p> if(mark!=1){</p><p>
52、; cout<<"渡輪未到,請汽車稍后上渡輪!"<<endl;</p><p> break;//結(jié)束switch語句</p><p><b> }</b></p><p><b> do{</b></p><p><b> i=0
53、;</b></p><p><b> //首先上4輛客車</b></p><p> while(!EmptyQueue(q1) && n<10 && i<4){</p><p> a[n++]=OutQueue(q1);</p><p><b>
54、i++;</b></p><p><b> }</b></p><p> //滿10輛開船,打印車輛號,重新對mark和n清0,轉(zhuǎn)功能號表</p><p> if(n==10){Print(a,n);mark=0;n=0;goto L1;}</p><p> //進4輛客車則接著進一輛貨車,不滿4輛則
55、由貨車補</p><p><b> if(i==4){</b></p><p> if(!EmptyQueue(q2)) a[n++]=OutQueue(q2);</p><p><b> }</b></p><p><b> else{</b></p>
56、<p> while(!EmptyQueue(q2) && n<10 && i<5){</p><p> a[n++]=OutQueue(q2);</p><p><b> i++;</b></p><p><b> }</b></p><p
57、><b> }</b></p><p><b> //滿10輛則開船</b></p><p> if(n==10){Print(a,n);mark=0;n=0;goto L1;}</p><p> }while(!EmptyQueue(q1) || !EmptyQueue(q2));</p>&
58、lt;p> //只要客車或貨車隊列不全為空,則繼續(xù)執(zhí)行do循環(huán)</p><p> t2=time(0)-t1;//登記渡輪已經(jīng)等待時間的秒數(shù)</p><p> cout<<"渡輪上有車"<<n<<"輛,已等待"<<t2/60<<"分"<<t2%
59、60;</p><p> cout<<"秒,等候其他汽車上渡輪!"<<endl;</p><p> break;//結(jié)束switch語句</p><p><b> case 4:</b></p><p> if(n==0 || mark==0)</p>
60、<p> cout<<"輪渡上無車過江或根本無渡輪!不需要起航!"<<endl;</p><p><b> else{</b></p><p> Print(a,n);mark=0;n=0;</p><p><b> }</b></p><
61、p><b> break;</b></p><p><b> case 5:</b></p><p> OutputQueue(q1,q2);</p><p> break;//結(jié)束switch語句</p><p><b> case 6:</b></
62、p><p> if(!EmptyQueue(q1) || !EmptyQueue(q2)){</p><p> cout<<"還有汽車未渡江,暫不能結(jié)束!"<<endl;</p><p> break;//結(jié)束switch語句</p><p><b> }</b><
63、;/p><p><b> if(n!=0){</b></p><p> cout<<"渡輪上有車,不能結(jié)束,需命令開渡輪!"<<endl;</p><p> break;//結(jié)束switch語句</p><p><b> }</b></p&g
64、t;<p> cout<<"程序運行結(jié)束!"<<endl;</p><p> return;//執(zhí)行結(jié)束返回</p><p> }//switch語句終端位置</p><p> }while(1);//外層do循環(huán)終端位置</p><p> ClearQ
65、ueue(q1);</p><p> ClearQueue(q2);</p><p><b> }</b></p><p><b> //主函數(shù)結(jié)束位置</b></p><p><b> 七 、測試數(shù)據(jù):</b></p><p><b>
66、; 八 、結(jié)果分析:</b></p><p> 選擇“1”時,輸入車輛號:</p><p> 45 78 67 238 32 109 32 12 35 87 49 19 39 189 456 203 142 53 88</p><p> 選擇“2”時,說明輪渡已經(jīng)到了渡口,汽車可以進入輪渡。</p><p> 顯示“渡輪
67、已到渡口,可以上船!”,說明輪渡已到渡口。</p><p> 選擇“3”時,讓汽車按照要求進入輪渡,如果裝載滿了(10輛),就立刻發(fā)船,不滿則等待。</p><p> 顯示“輪渡開始起航-></p><p> 本次過江的時間:Wed Jul 04 18:23:37 2007</p><p> 本次輪渡所載汽車:45 78 67
68、32 238 32 12 35 87 109”,</p><p> 說明已經(jīng)裝滿10輛車,立刻啟航。</p><p> 再次選擇“2”時,另一艘渡輪到渡口,汽車可以進入渡輪了。</p><p> 再次選擇“3”時,讓汽車進入輪渡。</p><p> 顯示“渡輪上有車9輛,已等待0分10秒,等候其他汽車上渡輪!”,渡輪沒有裝滿,要等待其
69、他車輛。</p><p> 選擇“4”時,認為讓輪渡啟航。</p><p> 顯示“輪渡開始起航-></p><p> 本次過江的時間:Wed Jul 04 18:27:35 2007</p><p> 本次輪渡所載汽車:49 19 39 53 189 88 456 203 142”。</p><p>
70、 選擇“5”時,輸出當前車輛排隊情況。因為由于上面兩次,車輛已經(jīng)全部上了渡輪,所以顯示“客車等候的情況:暫時無客車等候.貨車排隊的情況:暫時無貨車等候.”。</p><p> 選擇“6”時,退出運行。顯示“程序運行結(jié)束!”。</p><p><b> 九 、心得體會:</b></p><p> 通過這次課程設(shè)計,使我對《數(shù)據(jù)結(jié)構(gòu)》這門課程
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (3)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 (3)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計——課程設(shè)計報告模板
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (4)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實習(xí)報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告.doc
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 (2)
評論
0/150
提交評論