數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告 (3)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p><b>  項(xiàng) 目: </b></p><p><b>  專(zhuān) 業(yè): </b></p><p><b>  班 級(jí): </b></p><p>  學(xué) 號(hào): </p><

2、;p>  姓 名: </p><p><b>  指導(dǎo)老師: </b></p><p>  2006~2007學(xué)年第二學(xué)期</p><p><b>  一 、問(wèn)題描述:</b></p><p>  有一個(gè)渡口,每條渡輪一次能裝載10輛汽車(chē)過(guò)江,過(guò)江車(chē)輛分為客車(chē)和貨車(chē)兩類(lèi),上

3、渡輪有如下規(guī)定:</p><p>  同類(lèi)汽車(chē)先到先上船。</p><p><b>  客車(chē)先與貨車(chē)上船。</b></p><p>  每上4輛客車(chē)才允許上一輛貨車(chē),但若等待的客車(chē)不足4輛則用貨車(chē)填補(bǔ),反過(guò)來(lái),若沒(méi)有貨車(chē)等待則用客車(chē)填補(bǔ)。</p><p>  裝滿10輛后則自動(dòng)開(kāi)船,當(dāng)?shù)却龝r(shí)間較長(zhǎng)時(shí)車(chē)輛不足10輛也應(yīng)人為

4、控制發(fā)船。</p><p><b>  二 、算法思想:</b></p><p>  此問(wèn)題應(yīng)建立和使用兩個(gè)隊(duì)列,一個(gè)為客車(chē)隊(duì)列,另一個(gè)為貨車(chē)隊(duì)列,到渡口需過(guò)江的汽車(chē)分別進(jìn)入到相應(yīng)隊(duì)列中。當(dāng)渡口有渡輪時(shí)先讓客車(chē)隊(duì)列中的4個(gè)車(chē)輛出隊(duì)并開(kāi)進(jìn)渡輪,再讓貨車(chē)隊(duì)列中的一個(gè)車(chē)輛出隊(duì)并開(kāi)進(jìn)渡輪,若某一類(lèi)車(chē)輛隊(duì)列為空則從另一個(gè)隊(duì)列中補(bǔ)充。當(dāng)渡輪上的車(chē)輛已滿則自動(dòng)開(kāi)船,此時(shí)應(yīng)打印出已裝

5、車(chē)輛的每個(gè)車(chē)號(hào)。若裝載不足10輛,但兩個(gè)車(chē)輛隊(duì)列全為空,應(yīng)繼續(xù)等待一段時(shí)間,若等待時(shí)間較長(zhǎng),仍不滿載則應(yīng)人為控制開(kāi)船。</p><p><b>  三 、基本要求:</b></p><p>  總體原則是客車(chē)優(yōu)先于貨車(chē),比例為4:1,但能根據(jù)實(shí)際情況,靈活調(diào)整裝載的汽車(chē)以及發(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.隊(duì)列的相關(guān)運(yùn)算:(存于單獨(dú)源文件“鏈?zhǔn)疥?duì)列.cpp”

7、中)</p><p>  void InitQueue(LinkQueue& Q)//初始化隊(duì)列</p><p>  void EnQueue(LinkQueue& Q,ElemType item)//向隊(duì)列中插入一個(gè)元素</p><p>  ElemType OutQueue(LinkQueue& Q)//從隊(duì)列中刪除一個(gè)元素</

8、p><p>  void ClearQueue(LinkQueue& Q)//清除隊(duì)列中的所有元素,使之變成空隊(duì)</p><p>  bool EmptyQueue(LinkQueue& HQ)//檢查隊(duì)列是否為空</p><p>  2.渡輪輸出相關(guān)模塊:</p><p>  void Print(int a[],int n

9、) //輸出本次輪渡所載汽車(chē)編號(hào)</p><p>  void OutputQueue(const LinkQueue& q1,const LinkQueue& q2)</p><p>  //輸出汽車(chē)排隊(duì)等待的情況</p><p><b>  五 、數(shù)據(jù)結(jié)構(gòu):</b></p><p>  建立兩個(gè)鏈

10、接隊(duì)列,一個(gè)為客車(chē)隊(duì)列,另一個(gè)為貨車(chē)隊(duì)列,到渡口需過(guò)江的汽車(chē)分別進(jìn)入到相應(yīng)隊(duì)列中。</p><p><b>  鏈接隊(duì)列的定義為:</b></p><p>  struct LinkQueue</p><p><b>  {</b></p><p>  LNode* front;//隊(duì)首指

11、針</p><p>  LNode* rear;//隊(duì)尾指針</p><p><b>  };</b></p><p>  主函數(shù)中使用switch()函數(shù),將功能表中的六種選擇分別表示為case1~case6。</p><p><b>  具體表示:</b></p><

12、;p>  swtch(flag)//falg為輸入的功能序號(hào)</p><p>  case1://車(chē)到渡口進(jìn)行登記</p><p><b>  …</b></p><p>  case2://輪渡到渡口進(jìn)行登記</p><p><b>  …</b></p><p&g

13、t;  case3://汽車(chē)上輪渡</p><p><b>  …</b></p><p>  case4://命令輪渡起航</p><p><b>  …</b></p><p>  case5: //輸出當(dāng)前汽車(chē)排隊(duì)情況</p><p><b>  …&l

14、t;/b></p><p>  case6:// 結(jié)束程序運(yùn)行</p><p><b>  … </b></p><p><b>  六 、源程序:</b></p><p><b>  鏈?zhǔn)疥?duì)列.cpp</b></p><p>  void In

15、itQueue(LinkQueue& Q)//初始化隊(duì)列</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)//向隊(duì)列中插入一個(gè)元素</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)//若隊(duì)列為空,則新結(jié)點(diǎn)既是隊(duì)首又是隊(duì)尾</p><p>  Q.front=Q.rear=newptr;</p><p>  Q.rear->next=newptr;//若隊(duì)列非空,則新結(jié)點(diǎn)被鏈接到隊(duì)尾</p><p>  Q.rear=newptr;</p><p><

18、b>  }</b></p><p>  ElemType OutQueue(LinkQueue& Q)//從隊(duì)列中刪除一個(gè)元素</p><p><b>  {</b></p><p>  if(Q.front==NULL)//若隊(duì)列為空則終止運(yùn)行</p><p><b>  {

19、</b></p><p>  cout<<"Empty!"<<endl;</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  LNode *p;//暫存隊(duì)首元素以便返回&l

20、t;/p><p>  p=Q.front;//暫存隊(duì)首指針以便回收隊(duì)首結(jié)點(diǎn)</p><p>  ElemType a=p->data;//使隊(duì)首指針指向下一個(gè)結(jié)點(diǎn)</p><p>  Q.front=p->next;//若刪除后隊(duì)列為空,則使隊(duì)尾指針為空</p><p>  if(Q.front==NULL)&l

21、t;/p><p>  Q.rear=NULL;</p><p><b>  delete p;</b></p><p>  return a;//返回刪除的隊(duì)首元素</p><p><b>  }</b></p><p>  void ClearQueue(LinkQu

22、eue& Q)//清除隊(duì)列中的所有元素,使之變成空隊(duì)</p><p><b>  {</b></p><p>  LNode *b;//對(duì)首時(shí)針賦給p</p><p>  b=Q.front;</p><p>  while(Q.front!=NULL)//依次刪除隊(duì)列中的每個(gè)元素</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;//置隊(duì)尾指針為空</p><p><b>  }</b></p><p>  bool EmptyQueue(LinkQueue& HQ)//檢查隊(duì)列是否為空</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;//隊(duì)首指針</p><p>  LNode* rear;/

28、/隊(duì)尾指針</p><p><b>  };</b></p><p>  #include"鏈接隊(duì)列.cpp"</p><p>  //輸出本次輪渡所載汽車(chē)編號(hào)</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);//當(dāng)前機(jī)器系統(tǒng)時(shí)間被保存到t中,單位為秒</p><p>  cout<<endl;</p><p>  cout<<"輪渡開(kāi)始起航->"<<end

30、l;</p><p>  cout<<"本次過(guò)江的時(shí)間:"<<ctime(&t)<<endl;</p><p>  //ctime(&t)函數(shù)的值為根據(jù)參數(shù)t轉(zhuǎn)換得到的日期和時(shí)間的字符串</p><p>  cout<<"本次輪渡所載汽車(chē):";</p>

31、<p>  for(int i=0;i<n;i++)cout<<a[i]<<' ';</p><p>  cout<<endl;</p><p><b>  }</b></p><p>  //輸出汽車(chē)排隊(duì)等待的情況</p><p>  void O

32、utputQueue(const LinkQueue& q1,const LinkQueue& q2)</p><p><b>  {</b></p><p>  cout<<"客車(chē)等候的情況:";</p><p>  LNode* p=q1.front;</p><p>

33、  if(p==NULL)cout<<"暫時(shí)無(wú)客車(chē)等候."<<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<<"貨車(chē)排隊(duì)的情況:";</p><p>  p=q2.front;</p><p>  if(p=

35、=NULL)cout<<"暫時(shí)無(wú)貨車(chē)等候."<<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隊(duì)列用來(lái)分別存儲(chǔ)待渡江的客車(chē)和貨車(chē)</p><p>  LinkQueue q1,q2;</p><p>  //對(duì)q1和q2進(jìn)行初始化</p><p>  InitQueue(q1);</p><p>  InitQueue(q2);</p><p>  //用fla

38、g保存用戶選擇,用mark登記輪渡到渡口</p><p>  int flag,mark=0;</p><p>  //用數(shù)組a記錄輪渡上的每個(gè)汽車(chē)號(hào),用n記錄汽車(chē)的個(gè)數(shù)</p><p>  int a[10],n=0;</p><p>  // 用t1和t2登記時(shí)間</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---車(chē)到渡口進(jìn)行登記"<<endl;</p><p>  cout<<"2---輪渡到渡口進(jìn)行登記"<<endl;</p><p>  cout<<"3---汽車(chē)上輪渡"&l

41、t;<endl;</p><p>  cout<<"4---命令輪渡起航"<<endl;</p><p>  cout<<"5---輸出當(dāng)前汽車(chē)排隊(duì)情況"<<endl;</p><p>  cout<<"6---結(jié)束程序運(yùn)行"<<

42、endl<<endl;</p><p>  cout<<"請(qǐng)輸入你的選擇(1-6):";</p><p><b>  do</b></p><p><b>  {</b></p><p>  cin>>flag;</p><

43、p>  if(flag<1||flag>6)cout<<"輸入功能號(hào)錯(cuò),重輸:";</p><p>  }while(flag<1||flag>6);</p><p><b>  int x,i;</b></p><p>  //根據(jù)不同選擇進(jìn)行相應(yīng)處理</p><

44、;p>  switch(flag){</p><p><b>  case 1:</b></p><p>  cout<<"輸入車(chē)輛號(hào),假定小于100為客車(chē),否則為貨車(chē),"<<endl;</p><p>  cout<<"可以輸入多輛車(chē),用空格分開(kāi),直到輸入-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);//客車(chē)進(jìn)q1隊(duì)<

46、;/p><p>  else EnQueue(q2,x);//貨車(chē)進(jìn)q2隊(duì)</p><p><b>  }</b></p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  case 2:</b></p><p>  if(mark==1){&

47、lt;/p><p>  cout<<"渡輪已在渡口等待,不要重復(fù)登記!"<<endl;</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  }</b></p><p>  mark=1;//渡輪到口岸登記</p><

48、;p>  cout<<"渡輪已到渡口,可以上船!"<<endl;</p><p>  n=0;//裝載車(chē)輛數(shù)初始為0;</p><p>  t1=time(0);//登記渡輪到渡口時(shí)間,單位為秒</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><

49、;b>  case 3:</b></p><p>  if(EmptyQueue(q1) && EmptyQueue(q2)){</p><p>  cout<<"暫無(wú)汽車(chē)過(guò)江!"<<endl;</p><p>  if(mark==1 && n!=0){</p>

50、;<p>  t2=time(0)-t1;//計(jì)算到目前為止渡輪等待時(shí)間的秒數(shù)</p><p>  cout<<"輪渡未滿,有車(chē)"<<n<<"輛,已等待"<<t2/60<<"分";</p><p>  cout<<t2%60<<&

51、quot;秒,等候其他汽車(chē)上渡輪!"<<endl;</p><p><b>  }</b></p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  }</b></p><p>  if(mark!=1){</p><p>

52、;  cout<<"渡輪未到,請(qǐng)汽車(chē)稍后上渡輪!"<<endl;</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  }</b></p><p><b>  do{</b></p><p><b>  i=0

53、;</b></p><p><b>  //首先上4輛客車(chē)</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輛開(kāi)船,打印車(chē)輛號(hào),重新對(duì)mark和n清0,轉(zhuǎn)功能號(hào)表</p><p>  if(n==10){Print(a,n);mark=0;n=0;goto L1;}</p><p>  //進(jìn)4輛客車(chē)則接著進(jìn)一輛貨車(chē),不滿4輛則

55、由貨車(chē)補(bǔ)</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輛則開(kāi)船</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>  //只要客車(chē)或貨車(chē)隊(duì)列不全為空,則繼續(xù)執(zhí)行do循環(huán)</p><p>  t2=time(0)-t1;//登記渡輪已經(jīng)等待時(shí)間的秒數(shù)</p><p>  cout<<"渡輪上有車(chē)"<<n<<"輛,已等待"<<t2/60<<"分"<<t2%

59、60;</p><p>  cout<<"秒,等候其他汽車(chē)上渡輪!"<<endl;</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  case 4:</b></p><p>  if(n==0 || mark==0)</p>

60、<p>  cout<<"輪渡上無(wú)車(chē)過(guò)江或根本無(wú)渡輪!不需要起航!"<<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語(yǔ)句</p><p><b>  case 6:</b></

62、p><p>  if(!EmptyQueue(q1) || !EmptyQueue(q2)){</p><p>  cout<<"還有汽車(chē)未渡江,暫不能結(jié)束!"<<endl;</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  }</b><

63、;/p><p><b>  if(n!=0){</b></p><p>  cout<<"渡輪上有車(chē),不能結(jié)束,需命令開(kāi)渡輪!"<<endl;</p><p>  break;//結(jié)束switch語(yǔ)句</p><p><b>  }</b></p&g

64、t;<p>  cout<<"程序運(yùn)行結(jié)束!"<<endl;</p><p>  return;//執(zhí)行結(jié)束返回</p><p>  }//switch語(yǔ)句終端位置</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>  七 、測(cè)試數(shù)據(jù):</b></p><p><b>

66、;  八 、結(jié)果分析:</b></p><p>  選擇“1”時(shí),輸入車(chē)輛號(hào):</p><p>  45 78 67 238 32 109 32 12 35 87 49 19 39 189 456 203 142 53 88</p><p>  選擇“2”時(shí),說(shuō)明輪渡已經(jīng)到了渡口,汽車(chē)可以進(jìn)入輪渡。</p><p>  顯示“渡輪

67、已到渡口,可以上船!”,說(shuō)明輪渡已到渡口。</p><p>  選擇“3”時(shí),讓汽車(chē)按照要求進(jìn)入輪渡,如果裝載滿了(10輛),就立刻發(fā)船,不滿則等待。</p><p>  顯示“輪渡開(kāi)始起航-></p><p>  本次過(guò)江的時(shí)間:Wed Jul 04 18:23:37 2007</p><p>  本次輪渡所載汽車(chē):45 78 67

68、32 238 32 12 35 87 109”,</p><p>  說(shuō)明已經(jīng)裝滿10輛車(chē),立刻啟航。</p><p>  再次選擇“2”時(shí),另一艘渡輪到渡口,汽車(chē)可以進(jìn)入渡輪了。</p><p>  再次選擇“3”時(shí),讓汽車(chē)進(jìn)入輪渡。</p><p>  顯示“渡輪上有車(chē)9輛,已等待0分10秒,等候其他汽車(chē)上渡輪!”,渡輪沒(méi)有裝滿,要等待其

69、他車(chē)輛。</p><p>  選擇“4”時(shí),認(rèn)為讓輪渡啟航。</p><p>  顯示“輪渡開(kāi)始起航-></p><p>  本次過(guò)江的時(shí)間:Wed Jul 04 18:27:35 2007</p><p>  本次輪渡所載汽車(chē):49 19 39 53 189 88 456 203 142”。</p><p> 

70、 選擇“5”時(shí),輸出當(dāng)前車(chē)輛排隊(duì)情況。因?yàn)橛捎谏厦鎯纱?,?chē)輛已經(jīng)全部上了渡輪,所以顯示“客車(chē)等候的情況:暫時(shí)無(wú)客車(chē)等候.貨車(chē)排隊(duì)的情況:暫時(shí)無(wú)貨車(chē)等候.”。</p><p>  選擇“6”時(shí),退出運(yùn)行。顯示“程序運(yùn)行結(jié)束!”。</p><p><b>  九 、心得體會(huì):</b></p><p>  通過(guò)這次課程設(shè)計(jì),使我對(duì)《數(shù)據(jù)結(jié)構(gòu)》這門(mén)課程

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論