2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論