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

下載本文檔

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

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p>  題目 停車場管理系統(tǒng)程序</p><p>  班級 __________________</p><p>  姓名 __________________</p><p>  學(xué)號 __________________</p><p><b>  

2、停車場管理系統(tǒng)</b></p><p><b>  1 問題描述</b></p><p>  設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個門可供出入。汽車在停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列(門在最南端,最先到達的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一

3、輛汽車即可開入;當停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原順序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。</p><p><b>  2 需求分析</b></p><p> ?。?)根據(jù)車輛到達停車場到車輛離開停車場時所停留的時間進行計時收費。</p><

4、p> ?。?)當有車輛從停車場離開時,等待的車輛按順序進入停車場停放。實現(xiàn)停車場的調(diào)度功能。</p><p>  (3)用順序棧來表示停車場,鏈隊表示停車場外的便道。</p><p>  (4)顯示停車場信息和便道信息。</p><p>  (5)程序執(zhí)行的命令為:車輛進入停車場 車輛離開停車場 顯示停車場的信息。</p><p>  

5、(以棧S作為停車場,棧S1作為讓路的臨時停車點,隊列Q作為車等待時用的便道。stack[Max+1]作為車場能夠容納的車輛數(shù),num[10]作為車所在位置的編號,并且限定車場最多能夠容納10輛車.</p><p>  (2).用戶根據(jù)系統(tǒng)所規(guī)定并提示的要求輸入有關(guān)內(nèi)容,車場所能容納的車輛數(shù)由收費人員來確定,車輛離開時,車主還可以得到收據(jù),便于收費的管理使用;并且系統(tǒng)程序所提供的一些信息可通過特殊硬件顯示出來,供車

6、主了解信息,準確有效的停車。</p><p>  (3).程序應(yīng)該能夠顯示當前存車信息以及等待車的信息,便于管理人員對車輛進行管理,并且能夠給等待的車提供一些信息,便于他們能夠及時的停車。</p><p>  (4).程序執(zhí)行的命令為:輸入進站信息->輸入出站信息->打印收據(jù)</p><p>  (5).改程序系簡單的用于運用棧與隊列基本知識的工具,不能

7、用于現(xiàn)實中,特別是?!跋冗M后出”的規(guī)則大大限定了該程序的推廣,現(xiàn)實世界的車站管理系統(tǒng)比這個遠遠復(fù)雜的多。</p><p><b>  二.概要設(shè)計:</b></p><p>  1.設(shè)定棧的抽象數(shù)據(jù)類型定義為:</p><p>  ADT stack{</p><p>  數(shù)據(jù)對象:D={ai|ai∈charset,i=

8、1,2,……,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結(jié)果:構(gòu)造一個空棧S。</p>&l

9、t;p>  Push(&S,e)</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。</p><p>  Pop(&S,&e)</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:刪除S的棧頂元素,并以e返回

10、其值。</p><p>  StackTraverse(S,visit())</p><p>  初始條件:棧S已經(jīng)存在。</p><p>  操作結(jié)果:從棧底到棧頂依次對S中的每一個元素調(diào)用函數(shù)visit().</p><p>  }ADT stack</p><p>  2. 設(shè)定隊列的抽象數(shù)據(jù)類型定義為:<

11、/p><p>  數(shù)據(jù)對象:D={ai|ai∈Elemset,i=1,2,……,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2……,n}</p><p>  約定其中ai為隊列頭,an為隊列尾.</p><p><b>  基本操作:</b></p

12、><p>  InitQueue(&Q)</p><p>  操作結(jié)果:構(gòu)造一個空隊列Q.</p><p>  DestroyQueue(&Q)</p><p>  初始條件:隊列Q已存在.</p><p>  操作結(jié)果:隊列Q被銷毀,不再存在.</p><p>  ClearQue

13、ue(&Q)</p><p>  初始條件:隊列Q已存在.</p><p>  操作結(jié)果:將Q清為空隊列.</p><p>  QueueEmpty(Q)</p><p>  初始條件:隊列Q已存在.</p><p>  操作結(jié)果:若Q為空隊列,則返回True,否則返回False.</p><

14、;p>  QueueLength(Q)</p><p>  初始條件:隊列Q已經(jīng)存在.</p><p>  操作結(jié)果:返回Q的元素個數(shù),即隊列的長度.</p><p>  GetHead(Q,&e)</p><p>  初始條件:Q為非空隊列.</p><p>  操作結(jié)果:用e返回Q的對頭元素.<

15、/p><p>  EnQueue(&Q,e)</p><p>  初始條件:隊列Q已存在.</p><p>  操作結(jié)果:插入元素e為Q新的隊尾元素.</p><p>  DeQueue(&Q,&e)</p><p>  初始條件:Q為非空隊列.</p><p>  操作結(jié)果

16、:刪除Q的隊頭元素,并用e返回其值.</p><p>  QueueTraverse(Q,visit())</p><p>  初始條件:Q已存在且非空.</p><p>  操作結(jié)果:從隊頭到隊尾,依次對Q的每一個數(shù)據(jù)元素調(diào)用函數(shù)visit().一旦visit()失敗,則操作失敗.</p><p>  }ADT Queue</p>

17、;<p>  3.本程序包括四個模塊</p><p><b>  1)主程序模塊</b></p><p>  Void main()</p><p><b>  {</b></p><p><b>  聲明定義</b></p><p>&l

18、t;b>  調(diào)用棧與隊列的函數(shù)</b></p><p>  主信息(輸入初始操作信息)</p><p><b>  }</b></p><p>  2)棧模塊---實現(xiàn)棧抽象數(shù)據(jù)類型</p><p>  3)隊列模塊---實現(xiàn)隊列抽象數(shù)據(jù)類型</p><p>  4)結(jié)構(gòu)體模塊-

19、--用于對對象及變量的管理</p><p>  各模塊之間的調(diào)用關(guān)系如下: </p><p><b>  主程序模塊</b></p><p><b>  ↓</b></p><p><b>  結(jié)構(gòu)體模塊</b></p><p><b>  ↓

20、</b></p><p><b>  棧模塊</b></p><p><b>  ↓</b></p><p><b>  隊列模塊</b></p><p>  4.設(shè)計停車管理程序的要求</p><p>  按照從終端讀入的輸入數(shù)據(jù)進行模擬管

21、理,每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“進站”或“出站”信息、汽車牌照號碼以及進站或出站的時刻,對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)逗留的時間和應(yīng)交納的費用(在便道上停留不收費),按以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。</p><p><b>  三.詳細設(shè)計:</b></p><

22、p><b>  1. 時間結(jié)點類型</b></p><p>  typedef struct time{ </p><p>  int hour; </p><p><b>  int min; </b></p><p>  }Time; /*時間結(jié)點*/ </p><p&

23、gt;  2.車輛進出站信息類型</p><p>  typedef struct node{ </p><p>  char num[10];</p><p>  Time reach; </p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結(jié)點*/ </p>

24、<p>  3.停車場和便道信息類型</p><p>  typedef struct NODE{ </p><p>  CarNode *stack[Max+1];</p><p><b>  int top; </b></p><p>  }SeqStackCar; /*模擬車站*/</p>

25、<p>  typedef struct car{ </p><p>  CarNode *data;</p><p>  struct car *next; </p><p>  }QueueNode; </p><p>  typedef struct Node{ </p><p>  QueueNo

26、de *head; </p><p>  QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/ </p><p>  void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p>  //初始化,創(chuàng)建兩個新棧S,S1</p><p

27、>  int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p>  //初始化,創(chuàng)建一個隊列Q用于便道</p><p>  int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進站*/</p><p>  void Leave(SeqStackCar *,SeqStac

28、kCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p>  void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p>  4.主函數(shù)和其它函數(shù)的偽碼算法<

29、/p><p>  void main()</p><p><b>  {//主程序</b></p><p>  initialization(); //初始化</p><p><b>  while(1){</b></p><p>  scanf(...............

30、....);//根據(jù)提示信息輸入想要的操作</p><p>  switch(k){//根據(jù)輸入的數(shù)調(diào)用不同的函數(shù)</p><p><b>  case 1:</b></p><p><b>  case 2:</b></p><p>  ....................</p>

31、<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  typedef struct **{</p><p>  //用于創(chuàng)建不同結(jié)構(gòu)體類型的指針與變量</p><p&

32、gt;<b>  }</b></p><p>  void PRINT(CarNode *p){</p><p><b>  //調(diào)用輸出函數(shù)</b></p><p>  Leave(*p,n)...................</p><p>  根據(jù)求解時間值來求得費用,并通過收據(jù)打印出來&

33、lt;/p><p><b>  }</b></p><p><b>  5.主要函數(shù)思想</b></p><p>  本程序是個簡單的棧與隊列的應(yīng)用程序,其所用的函數(shù)也是棧與隊列的基本函數(shù),但在編寫函數(shù)時應(yīng)特別注意它的面向?qū)ο笮耘c窗口化設(shè)計,切身為使用者著想.所以在運用一些函數(shù)時調(diào)用的基本語句有太多的重復(fù),其目的在于實現(xiàn)它本來

34、的基本目的.</p><p><b>  四.調(diào)試分析:</b></p><p>  本次作業(yè)比較簡單,只是棧與隊列的復(fù)習(xí)應(yīng)用,所以總的調(diào)試比較順利,只是在調(diào)用棧與隊列的函數(shù)時遇到一些問題,比如我想通過鍵盤輸入來確定停車場的停車數(shù),所以初始化時那些操作函數(shù)必須帶有停車數(shù)這個參數(shù)。</p><p>  在定義棧的元素最大空間時如果使用順序棧必須先

35、給它賦初值,但如果通過鏈表就可以實現(xiàn)動態(tài)分配內(nèi)存,為棧動態(tài)開辟新空間。</p><p>  在判斷鍵盤輸入是否符合要求時,如果不符合要求應(yīng)循環(huán)賦值,直到符合要求為止,在此利用的do-while循環(huán)語句與外部while語句套用時應(yīng)使用兩次break語句,才能跳出循環(huán),否則會造成死循環(huán)。</p><p>  經(jīng)驗體會:通過DEBUG調(diào)試器和數(shù)據(jù)觀察窗口,可以加快找到程序中的疵點。</p&

36、gt;<p>  五.軟件使用說明書:</p><p>  本系統(tǒng)為存車信息管理軟件,能實現(xiàn)車場存車及便道存車信息的輸入,輸出,查找等功能,并建立和更新的存車費用信息保存于文件輸出或打印。對于查找等功能能夠按存車位置及車牌號分別進行。每輛車的相關(guān)信息包括:車牌號,進站時間,出站時間,存車位置,停車費用等。</p><p>  本系統(tǒng)功能還需完善,操作簡單,只是供學(xué)習(xí)之用,并不

37、能作為實際生活使用。</p><p>  下面介紹了此軟件的使用說明:</p><p>  1.停車場.exe;</p><p>  2.進入演示系統(tǒng)后首先是一個用戶及管理員使用注意事項界面,進入后會出現(xiàn)菜單選項。</p><p>  1.車輛進站 2.車輛出站 3.存車信息 4.離開系統(tǒng)</p><p>

38、  請選擇: 1|2|3|4.</p><p>  這時可按照提示進行你想要的操作。</p><p>  3.對于1-4的具體操作與內(nèi)容請詳見前面的調(diào)試分析,您便可以輕松操作了!</p><p>  六.總結(jié):經(jīng)過這次課程設(shè)計,通過對程序的編制,調(diào)試和運行,使我更好的掌握了棧和隊列基本性質(zhì)和有關(guān)它們之間關(guān)系使用問題的解決方法,熟悉了各種調(diào)用的數(shù)據(jù)類型,在調(diào)試和運行

39、過程中使我更加的了解和熟悉程序運行的環(huán)境,提高了我對程序調(diào)試分析的能力和對錯誤的糾正能力。這次數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計,對于我來說是一個挑戰(zhàn)。我對數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)在程序的設(shè)計中也有所體現(xiàn)。課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識、發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程。隨著科學(xué)技術(shù)發(fā)展的日新月異,當今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀的大學(xué)來說掌握計算機開發(fā)技術(shù)是十分重要

40、的。</p><p><b>  七.附錄</b></p><p><b>  所用到的庫函數(shù):</b></p><p>  Stdio.h /*標準輸入/輸出頭文件*/</p><p>  String.h /*包含字符串處理函數(shù)頭文件*/</p><p>

41、;  Stdlib.h /*包含動態(tài)存儲與釋放函數(shù)頭文件*/</p><p>  Malloc.h /*包含內(nèi)存分配頭文件*/</p><p>  該停車場管理系統(tǒng)的主要程序如下:</p><p>  /*停車場管理系統(tǒng)*/</p><p>  #include<stdio.h></p><p&g

42、t;  #include<stdlib.h> </p><p>  #include<string.h></p><p>  #include<malloc.h></p><p>  /*------------------------------------------------------------------------

43、------*/ </p><p>  #define Max 10</p><p>  int getn()</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  printf("歡迎您光臨順風停車場,&qu

44、ot;);</p><p>  printf("本停車場管理實行24小時制,停車每分鐘0.1元.\n");</p><p>  printf("請輸入停車場可容納的車(最多10輛):");</p><p>  scanf("%d",&n);</p><p>  fflush(

45、stdin);</p><p><b>  do{</b></p><p>  if(n<1 || n>10)</p><p><b>  {</b></p><p>  printf("輸入的車輛數(shù)不在要求范圍內(nèi),請重新輸入!");</p><p

46、>  scanf("%d",&n);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p>  }while(n<1 || n>10);</p><p>&

47、lt;b>  return n;</b></p><p><b>  }</b></p><p>  typedef struct time{ </p><p>  int hour; </p><p><b>  int min; </b></p><p>

48、;  }Time; /*時間結(jié)點*/ </p><p>  typedef struct node{ </p><p>  char num[10];</p><p>  Time reach; </p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結(jié)點*/ </p&

49、gt;<p>  typedef struct NODE{ </p><p>  CarNode *stack[Max+1];</p><p><b>  int top; </b></p><p>  }SeqStackCar; /*模擬車站*/</p><p>  typedef struct car{

50、 </p><p>  CarNode *data;</p><p>  struct car *next; </p><p>  }QueueNode; </p><p>  typedef struct Node{ </p><p>  QueueNode *head; </p><p> 

51、 QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/ </p><p>  void InitStack(SeqStackCar *,int n); /*聲明棧*/</p><p>  int InitQueue(LinkQueueCar *); /*聲明便道*/</p><p>  int

52、 Arrival(SeqStackCar *,LinkQueueCar *,int n); /*車輛進站*/</p><p>  void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*車輛出站*/</p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ &

53、lt;/p><p>  void InitStack(SeqStackCar *s,int n) /*初始化棧*/</p><p><b>  { </b></p><p><b>  int i; </b></p><p>  s->top=0; </p><p>  

54、for(i=0;i<=n;i++)</p><p>  s->stack[s->top]=NULL; </p><p><b>  } </b></p><p>  int InitQueue(LinkQueueCar *Q) /*初始化便道*/ </p><p><b>  { </b

55、></p><p>  Q->head=(QueueNode *)malloc(sizeof(QueueNode)); </p><p>  if(Q->head!=NULL) </p><p><b>  { </b></p><p>  Q->head->next=NULL; </

56、p><p>  Q->rear=Q->head; </p><p>  return(1); </p><p><b>  } </b></p><p>  else return(-1); </p><p><b>  } </b></p><p

57、>  void PRINT(CarNode *p) /*打印出站車的信息*/</p><p><b>  { </b></p><p>  int A1,A2,B1,B2;</p><p>  int a,b,c; </p><p>  printf("\n請輸入離開的時間:/**:**/");

58、 </p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(p->leave.hour

59、<p->reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min))</p><p><b>  {</b></p><p>  printf("輸入離開時間比進站時間早,請重新輸入!\n");</

60、p><p>  scanf("%d:%d",&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  if(p->leave.hour<0 ||

61、 p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60)</p><p><b>  {</b></p><p>  printf("輸入的時間格式有錯,請重新輸入!");</p><p>  scanf("%d:%d&q

62、uot;,&(p->leave.hour),&(p->leave.min));</p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p>  }while(p->leave.hour<p-&

63、gt;reach.hour || (p->leave.hour==p->reach.hour && p->leave.min<p->reach.min) || p->leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60);</p><p

64、>  printf("車場現(xiàn)在有一輛車離開,請便道里的第一輛車進入車場!\n");</p><p>  printf("出站的車的車牌號為:");</p><p>  puts(p->num);</p><p>  printf("\n");</p><p>  A1=p

65、->reach.hour; </p><p>  A2=p->reach.min; </p><p>  B1=p->leave.hour; </p><p>  B2=p->leave.min;</p><p>  a=(B1-A1)*60+B2-A2;</p><p><b>  

66、if(a>=60)</b></p><p><b>  {</b></p><p><b>  b=a/60;</b></p><p><b>  c=a-60*b;</b></p><p><b>  }</b></p>

67、<p><b>  else</b></p><p><b>  {</b></p><p><b>  b=0;</b></p><p><b>  c=a;</b></p><p><b>  }</b></p&g

68、t;<p>  printf(" 祝您一路順風,歡迎您下次光臨.");</p><p>  printf("\n 收 據(jù)\n");</p><p>  printf("================================== 車牌號: ");</p

69、><p>  puts(p->num);</p><p>  printf("\n");</p><p>  printf("===================================================\n");</p><p>  printf("|進車場時刻 |

70、 出車場時刻 | 停留時間 | 應(yīng)付(元)|\n");</p><p>  printf("====================================================\n");</p><p>  printf("| %d:%d",p->reach.hour,p->reach.min);<

71、/p><p>  printf(" | %d:%d",p->leave.hour,p->leave.min);</p><p>  printf(" | %d:%d",b,c);</p><p>  printf(" | %2.1f",0.1*a);</p>

72、;<p>  printf(" |\n");</p><p>  printf("-----------------------------------------------------\n");</p><p><b>  free(p);</b></p><p><b>

73、;  } </b></p><p>  int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*車輛到達*/</p><p><b>  { </b></p><p>  CarNode *p; </p><p>  QueueNode *t; <

74、;/p><p><b>  int a,b;</b></p><p>  p=(CarNode *)malloc(sizeof(CarNode)); </p><p>  flushall(); </p><p>  printf("\n請輸入車牌號(七位,例:陜A1234):\n");</p>

75、;<p>  printf("請嚴格按照要求輸入車牌號,否則系統(tǒng)會出錯!\n");</p><p><b>  do{</b></p><p>  a=strlen("陜A1234");</p><p>  b=strlen(gets(p->num));</p><

76、p>  fflush(stdin);</p><p><b>  if(a!=b)</b></p><p><b>  {</b></p><p>  printf("輸入車牌號格式錯誤,請重新輸入(七位)!\n");</p><p>  gets(p->num);&

77、lt;/p><p>  fflush(stdin);</p><p><b>  }</b></p><p>  else break;</p><p><b>  if(a!=b)</b></p><p>  printf("輸入車牌號格式錯誤,請重新輸入(七位)!\

78、n");</p><p>  }while(a!=b);</p><p>  if(Enter->top<n) /*車場未滿,車進車場*/</p><p><b>  { </b></p><p>  Enter->top++; </p><p>  printf(&q

79、uot;\n車輛在車場第%d位置.",Enter->top); </p><p>  fflush(stdin);</p><p>  printf("\n請輸入到達時間:/**:**/"); </p><p>  scanf("%d:%d",&(p->reach.hour),&(p-&g

80、t;reach.min));</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60

81、)</p><p><b>  {</b></p><p>  printf("輸入的時間格式有錯,請重新輸入!");</p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min));</p><p>

82、  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  break;</b></p><p>  }while(p->reach.hour<0 || p->reach.

83、hour>=24 || p->reach.min<0 || p->reach.min>=60);</p><p>  Enter->stack[Enter->top]=p; </p><p>  return(1); </p><p><b>  } </b></p><p> 

84、 else /*車場已滿,車進便道*/ </p><p><b>  { </b></p><p>  printf("\n請該車在便道稍作等待!");</p><p>  t=(QueueNode *)malloc(sizeof(QueueNode)); </p><p>  t->data

85、=p; </p><p>  t->next=NULL; </p><p>  W->rear->next=t; </p><p>  W->rear=t; </p><p>  return(1); </p><p><b>  } </b></p>&l

86、t;p><b>  } </b></p><p>  void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n)</p><p>  { /*車輛離開*/ </p><p>  int i, room; </p><p>  CarN

87、ode *p,*t; </p><p>  QueueNode *q; </p><p>  /*判斷車場內(nèi)是否有車*/ </p><p>  if(Enter->top>0) /*有車*/ </p><p><b>  { </b></p><p>  while(1) /*輸入

88、離開車輛的信息*/ </p><p><b>  { </b></p><p>  printf("\n請輸入要離開的車在車場的位置/1--%d/:",Enter->top);</p><p>  scanf("%d",&room);</p><p>  fflus

89、h(stdin); </p><p>  if(room>=1&&room<=Enter->top) break; </p><p><b>  } </b></p><p>  while(Enter->top>room) /*車輛離開*/ </p><p><b&g

90、t;  { </b></p><p>  Temp->top++; </p><p>  Temp->stack[Temp->top]=Enter->stack[Enter->top]; </p><p>  Enter->stack[Enter->top]=NULL; </p><p>

91、  Enter->top--; </p><p><b>  } </b></p><p>  p=Enter->stack[Enter->top]; </p><p>  Enter->stack[Enter->top]=NULL; </p><p>  Enter->top--;

92、 </p><p>  while(Temp->top>=1) </p><p><b>  { </b></p><p>  Enter->top++; </p><p>  Enter->stack[Enter->top]=Temp->stack[Temp->top]; &l

93、t;/p><p>  Temp->stack[Temp->top]=NULL; </p><p>  Temp->top--; </p><p><b>  } </b></p><p><b>  PRINT(p);</b></p><p>  /*判斷通道上

94、是否有車及車站是否已滿*/ </p><p>  if((W->head!=W->rear)&&Enter->top<n) /*便道的車輛進入車場*/</p><p><b>  {</b></p><p>  q=W->head->next; </p><p>  t

95、=q->data; </p><p>  Enter->top++; </p><p>  printf("\n現(xiàn)在請便道上的車進入車場.該車的車牌號為:");</p><p>  puts(t->num);</p><p>  printf("\n該車進入車場第%d位置.",Ente

96、r->top);</p><p>  printf("\n請輸入現(xiàn)在的時間(即該車進站的時間)/**:**/:");</p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p>  fflush(stdin); <

97、/p><p><b>  do{</b></p><p>  if(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60)</p><p><b>  {</b></p>

98、<p>  printf("輸入的時間格式有錯,請重新輸入!");</p><p>  scanf("%d:%d",&(t->reach.hour),&(t->reach.min));</p><p>  fflush(stdin);</p><p><b>  }</b

99、></p><p><b>  else</b></p><p><b>  break;</b></p><p>  }while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min&

100、gt;=60);</p><p>  W->head->next=q->next; </p><p>  if(q==W->rear) W->rear=W->head; </p><p>  Enter->stack[Enter->top]=t; </p><p><b>  free

101、(q); </b></p><p><b>  } </b></p><p>  else printf("\n目前便道里沒有車.\n");</p><p><b>  } </b></p><p>  else printf("\n目前車場里沒有車,來車請

102、直接進入車場!"); /*沒車*/</p><p><b>  } </b></p><p>  void List1(SeqStackCar *S) /*列表顯示車場存車信息*/</p><p><b>  { </b></p><p><b>  int i; </b

103、></p><p>  if(S->top>0) /*判斷車站內(nèi)是否有車*/ </p><p><b>  { </b></p><p>  printf("\n車場:"); </p><p>  printf("\n 位置 到達時間 車牌號\n"); </

104、p><p>  for(i=1;i<=S->top;i++) </p><p><b>  { </b></p><p>  printf(" %d ",i); </p><p>  printf("%d:%d ",S->stack[i]->reach.hour

105、,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->num); </p><p><b>  } </b></p><p><b>  } </b></p><p>  else printf("\n目前車場

106、里沒有車");</p><p><b>  } </b></p><p>  void List2(LinkQueueCar *W) /*列表顯示便道信息*/ </p><p><b>  { </b></p><p>  QueueNode *p; </p><p&

107、gt;  p=W->head->next; </p><p>  if(W->head!=W->rear) /*判斷通道上是否有車*/ </p><p><b>  { </b></p><p>  printf("\n目前正在等待車輛的號碼為:");</p><p>  wh

108、ile(p!=NULL) </p><p><b>  { </b></p><p>  puts(p->data->num); </p><p>  p=p->next; </p><p>  printf("\n");</p><p><b> 

109、 } </b></p><p><b>  } </b></p><p>  else printf("\n目前便道里沒有車.");</p><p><b>  } </b></p><p>  void List(SeqStackCar S,LinkQueueCar

110、 W) </p><p><b>  { </b></p><p>  int flag,tag; </p><p><b>  flag=1; </b></p><p>  while(flag) </p><p><b>  { </b></p

111、><p>  printf("\n1.車場\n2.便道\n3.返回\n"); </p><p><b>  while(1) </b></p><p>  { printf("\n請選擇 1|2|3:"); </p><p>  scanf("%d",&t

112、ag);</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(tag<1||tag>3)</p><p><b>  {</b></p><p>  printf("輸入有誤,請按要求重

113、新輸入!");</p><p>  scanf("%d",&tag);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b&g

114、t;  break;</b></p><p>  }while(tag>3 && tag<1);</p><p><b>  break;</b></p><p><b>  } </b></p><p>  switch(tag) </p>&

115、lt;p><b>  { </b></p><p>  case 1:List1(&S);break; /*列表顯示車場信息*/ </p><p>  case 2:List2(&W);break; /*列表顯示便道信息*/ </p><p>  case 3:flag=0;break;/*返回*/</p>

116、<p>  default: break; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p>  void main() </p><p><b&

117、gt;  { </b></p><p>  SeqStackCar Enter,Temp; </p><p>  LinkQueueCar Wait;</p><p><b>  int ch;</b></p><p><b>  int n; </b></p><p

118、>  printf("該停車場管理系統(tǒng)是個比較簡單系統(tǒng),在應(yīng)用的時候請注意要求! \n");</p><p>  printf("如果您有任何問題,請及時聯(lián)系我們,謝謝合作!\n");</p><p>  printf("=========================================================

119、===\n");</p><p><b>  n=getn();</b></p><p>  InitStack(&Enter,n); /*初始化車場*/</p><p>  InitStack(&Temp,n); /*初始化讓路的臨時棧*/</p><p>  InitQueue(&W

120、ait); /*初始化便道*/</p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  printf("\n1. 車輛進站");</p><p>  printf(" 2. 車輛出站");<

121、/p><p>  printf(" 3. 存車信息");</p><p>  printf(" 4. 退出系統(tǒng)\n"); </p><p><b>  while(1) </b></p><p>  {printf("請選擇: 1|2|3|4.\n");</p

122、><p>  scanf("%d",&ch);</p><p>  fflush(stdin);</p><p><b>  do{</b></p><p>  if(ch>4 || ch<1){</p><p>  printf("輸入有誤,請重新輸

123、入!");</p><p>  scanf("%d",&ch);</p><p>  fflush(stdin);</p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

124、 break;</b></p><p>  }while(ch>4 || ch<1);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  switch(ch) </p><p><b&g

125、t;  { </b></p><p>  case 1:Arrival(&Enter,&Wait,n);break; /*車輛進站*/</p><p>  case 2:Leave(&Enter,&Temp,&Wait,n);break; /*車輛出站*/</p><p>  case 3:List(Enter,

126、Wait);break; /*存車信息*/</p><p>  case 4:exit(0); /*退出系統(tǒng)*/</p><p>  default:break;</p><p><b>  } </b></p><p><b>  } </b></p><p><b

127、>  }</b></p><p><b>  6 課程設(shè)計總結(jié)</b></p><p>  通過這次課程設(shè)計使我充分的理解了用棧和隊列實現(xiàn)模擬停車場的基本原理,知道了棧的順序存儲結(jié)構(gòu)和隊列的鏈式存儲結(jié)構(gòu)的定義和算法描述,同時也學(xué)會了編寫停車場問題的程序。雖然此次的程序不是很完備,沒有加入一些更完善的功能,但是總體還是一個比較能體現(xiàn)數(shù)據(jù)結(jié)構(gòu)知識點能力的

128、程序了,當然只是相對于我這個初學(xué)者來說。在剛開始編程的時候,我感到有點無從下手,但經(jīng)過對題目的詳細分析和思考之后,我就知道具體應(yīng)該做什么,怎么做了。經(jīng)過幾天和同組同學(xué)的一起研究,我們分工完成了這個程序,完成這個程序,我學(xué)到了很多東西,這是在課堂上無法做到的。</p><p>  在此我非常要感謝的是我的指導(dǎo)老師老師,感謝老師的細心認真的輔導(dǎo),讓我對數(shù)據(jù)結(jié)構(gòu)這門課程掌握得更好,懂得更多,她教我怎么分析問題,應(yīng)該要注

129、意些什么,最后還指出我存在的問題。</p><p><b>  參考文獻</b></p><p>  [1] 黃同成,黃俊民,董建寅.數(shù)據(jù)結(jié)構(gòu)[M].北京:中國電力出版社,2008</p><p>  [2] 董建寅,黃俊民,黃同成.數(shù)據(jù)結(jié)構(gòu)實驗指導(dǎo)與題解[M].北京:中國電力出版社,2008</p><p>  [3]

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論