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

下載本文檔

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

文檔簡介

1、<p><b>  停車場管理的實(shí)現(xiàn)</b></p><p>  一、程序中所采用的數(shù)據(jù)結(jié)構(gòu)及存儲(chǔ)結(jié)構(gòu)的說明</p><p>  以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表實(shí)現(xiàn)。</p><p>  程序中分別采用了“?!焙汀瓣?duì)列”作為其存儲(chǔ)結(jié)構(gòu)。</p>

2、<p>  “?!钡亩x可知,每一次入棧的元素都在原棧頂元素之上成為新的元素,每一次出棧的元素總是當(dāng)前棧頂元素使次棧元素成為新的棧頂元素,即最后進(jìn)棧者先出棧。程序中采用的結(jié)構(gòu)是:</p><p>  typedef struct NODE{ </p><p>  CarNode *stack[MAX+1]; </p><p><b>  in

3、t top; </b></p><p>  }SeqStackCar; /*模擬車庫*/</p><p>  “隊(duì)列”是限定所有插入操作只能在表的一端進(jìn)行,而所有的刪除操作都只能在表的另一端進(jìn)行。插入端叫隊(duì)尾,刪除端叫對頭。按先進(jìn)先出規(guī)則進(jìn)行。程序中采用的結(jié)構(gòu)是:</p><p>  typedef struct Node{ </p>&l

4、t;p>  QueueNode *head; </p><p>  QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/</p><p><b>  二、算法的設(shè)計(jì)思想</b></p><p>  由于停車場是一個(gè)狹窄通道,而且只有一個(gè)大門可供汽車進(jìn)出,問題要求汽車

5、停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列。由此很容易聯(lián)想到數(shù)據(jù)結(jié)構(gòu)中的堆棧模型,因此可首先設(shè)計(jì)一個(gè)堆棧,以堆棧來模擬停車場,又每個(gè)汽車的車牌號都不一樣,這樣一來可以根據(jù)車牌號準(zhǔn)確找到汽車位置,所以堆棧里的數(shù)據(jù)元素我設(shè)計(jì)成汽車的車牌號。當(dāng)停車場內(nèi)某輛車要離開時(shí),在他之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入停車場。這是個(gè)一退一進(jìn)的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設(shè)計(jì)一個(gè)堆

6、棧,以之來暫時(shí)存放為出站汽車暫時(shí)讓道的汽車車牌號。當(dāng)停車場滿后,繼續(xù)進(jìn)來的汽車需要停放在停車場旁邊的便道上等候,若停車場有汽車開走,則按排隊(duì)的先后順序依次進(jìn)站,最先進(jìn)入便道的汽車將會(huì)最先進(jìn)入停車場,這完全是一個(gè)先進(jìn)先出模型,因此可設(shè)計(jì)一個(gè)隊(duì)列來模擬便道,隊(duì)列中的數(shù)據(jù)元素仍然設(shè)計(jì)成汽車的車牌號。另外,停車場根據(jù)汽車在停車場內(nèi)停放的總時(shí)長來收費(fèi)的,在便道上的時(shí)間不計(jì)費(fèi),因此必須記錄車輛進(jìn)入停車場時(shí)的時(shí)間,車輛離開停車場時(shí)的時(shí)間不需要記錄,當(dāng)

7、從終端輸入時(shí)可直接使用。由于時(shí)間不象汽車一樣需要讓道</p><p>  說明:對時(shí)間復(fù)雜度的分析,均指在最壞情況下的時(shí)間復(fù)雜度。</p><p><b>  在棧結(jié)構(gòu)中:</b></p><p>  (1) 初始化棧(即車庫),使車庫為空的,此時(shí),時(shí)間復(fù)雜度=O(max)。</p><p>  (2) 停車最壞的情況是

8、要車位已經(jīng)滿,此時(shí),時(shí)時(shí)間復(fù)雜度=O(1)。</p><p>  (3) 關(guān)于車輛離開的時(shí)間復(fù)雜度=O(max)。</p><p>  (4) 車場信息的顯示的時(shí)間復(fù)雜度=O(1)。</p><p><b>  在隊(duì)列結(jié)構(gòu)中:</b></p><p>  (1) 出場車的信息的時(shí)間復(fù)雜度=O(1)。</p>

9、<p>  (2) 判斷通道上是否有車及車站是否已滿,此時(shí),時(shí)間復(fù)雜度O=(max)。</p><p>  (3) 車輛停車費(fèi)用的時(shí)間復(fù)雜度O=(1)。</p><p>  四.設(shè)計(jì)原理、框圖 </p><p><b>  五.運(yùn)行結(jié)果</b></p><p><b>  車輛進(jìn)入車場:</b

10、></p><p><b>  車場已滿:</b></p><p><b>  車輛離開,并收費(fèi):</b></p><p><b>  列出車場信息:</b></p><p><b>  列出車道信息:</b></p><p>

11、;<b>  2.7程序</b></p><p>  #include<stdio.h> </p><p>  #include<stdlib.h> </p><p>  #include<string.h> </p><p>  /*-------------------------

12、-----------------------------------------------------*/ </p><p>  #define MAX 3 /*車庫容量*/ </p><p>  #define price 0.05 /*每車每分鐘費(fèi)用*/ </p><p>  typedef struct time{ </p><p>

13、;  int hour; </p><p><b>  int min; </b></p><p>  }Time; /*時(shí)間結(jié)點(diǎn)*/ </p><p>  typedef struct node{ </p><p>  char num[10]; </p><p>  Time reach; &

14、lt;/p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結(jié)點(diǎn)*/ </p><p>  typedef struct NODE{ </p><p>  CarNode *stack[MAX+1]; </p><p><b>  int top; </b>&

15、lt;/p><p>  }SeqStackCar; /*模擬車場*/ </p><p>  typedef struct car{ </p><p>  CarNode *data; </p><p>  struct car *next; </p><p>  }QueueNode; </p><p&

16、gt;  typedef struct Node{ </p><p>  QueueNode *head; </p><p>  QueueNode *rear; </p><p>  }LinkQueueCar; /*模擬通道*/ </p><p>  /*------------------------------------------

17、------------------------------------*/ </p><p>  void InitStack(SeqStackCar *); /*初始化棧*/ </p><p>  int InitQueue(LinkQueueCar *); /*初始化便道*/ </p><p>  int Arrival(SeqStackCar *,LinkQ

18、ueueCar *); /*車輛到達(dá)*/ </p><p>  void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/ </p><p>  void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ </p><p>  /*---------------

19、---------------------------------------------------------------*/ </p><p>  void main() </p><p><b>  { </b></p><p>  SeqStackCar Enter,Temp; </p><p>  LinkQ

20、ueueCar Wait; </p><p><b>  int ch; </b></p><p>  InitStack(&Enter); /*初始化車站*/ </p><p>  InitStack(&Temp); /*初始化讓路的臨時(shí)棧*/ </p><p>  InitQueue(&Wai

21、t); /*初始化通道*/ </p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  printf("\n1.車輛到達(dá)"); </p><p>  printf(" 2.車輛離開"); </p

22、><p>  printf(" 3.列表顯示 "); </p><p>  printf(" 4.退出系統(tǒng)"); </p><p><b>  while(1) </b></p><p><b>  { </b></p><p>  sca

23、nf("%d",&ch); </p><p>  if(ch>=1&&ch<=4)break; </p><p>  else printf("\nplease choose: 1|2|3|4."); </p><p><b>  } </b></p>&

24、lt;p>  switch(ch) </p><p><b>  { </b></p><p>  case 1:Arrival(&Enter,&Wait);break; /*車輛到達(dá)*/ </p><p>  case 2:Leave(&Enter,&Temp,&Wait);break; /*車輛

25、離開*/ </p><p>  case 3:List(Enter,Wait);break; /*列表打印信息*/ </p><p>  case 4:exit(0); /*退出主程序*/ </p><p>  default: break; </p><p><b>  } </b></p><p&

26、gt;<b>  } </b></p><p><b>  } </b></p><p>  /*------------------------------------------------------------------------------*/ </p><p>  void InitStack(SeqSta

27、ckCar *s) /*初始化棧*/ </p><p><b>  { </b></p><p><b>  int i; </b></p><p>  s->top=0; </p><p>  for(i=0;i<=MAX;i++) </p><p>  s-&

28、gt;stack[s->top]=NULL; </p><p><b>  } </b></p><p>  int InitQueue(LinkQueueCar *Q) /*初始化便道*/ </p><p><b>  { </b></p><p>  Q->head=(QueueNo

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

30、p><p>  return(1); </p><p><b>  } </b></p><p>  else return(-1); </p><p><b>  } </b></p><p>  void PRINT(CarNode *p,int room) /*打印出場車的

31、信息*/ </p><p><b>  { </b></p><p>  int A1,A2,B1,B2; </p><p>  printf("\n請輸入離開的時(shí)間:/**:**/"); </p><p>  scanf("%d:%d",&(p->leave.hou

32、r),&(p->leave.min)); </p><p>  printf("\n離開車輛的車牌號為:"); </p><p>  puts(p->num); </p><p>  printf("\n其到達(dá)時(shí)間為: %d:%d",p->reach.hour,p->reach.min); &l

33、t;/p><p>  printf("離開時(shí)間為: %d:%d",p->leave.hour,p->leave.min); </p><p>  A1=p->reach.hour; </p><p>  A2=p->reach.min; </p><p>  B1=p->leave.hour; &

34、lt;/p><p>  B2=p->leave.min; </p><p>  printf("\n應(yīng)交費(fèi)用為:%2.1f元",((B1-A1)*60+(B2-A2))*price); </p><p><b>  free(p); </b></p><p><b>  } </b&

35、gt;</p><p>  int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ </p><p><b>  { </b></p><p>  CarNode *p; </p><p>  QueueNode *t; </p><p>

36、  p=(CarNode *)malloc(sizeof(CarNode)); </p><p>  flushall(); </p><p>  printf("\n請輸入車牌號(例如:閩A1234):"); </p><p>  gets(p->num); </p><p>  if(Enter->top&

37、lt;MAX) /*車場未滿,車進(jìn)車場*/ </p><p><b>  { </b></p><p>  Enter->top++; </p><p>  printf("\n車輛在車場第%d位置.",Enter->top); </p><p>  printf("\n請輸入到

38、達(dá)時(shí)間:/**:**/"); </p><p>  scanf("%d:%d",&(p->reach.hour),&(p->reach.min)); </p><p>  Enter->stack[Enter->top]=p; </p><p>  return(1); </p>&

39、lt;p><b>  } </b></p><p>  else /*車場已滿,車進(jìn)便道*/ </p><p><b>  { </b></p><p>  printf("\n該車須在便道等待!"); </p><p>  t=(QueueNode *)malloc(si

40、zeof(QueueNode)); </p><p>  t->data=p; </p><p>  t->next=NULL; </p><p>  W->rear->next=t; </p><p>  W->rear=t; </p><p>  return(1); </p&g

41、t;<p><b>  } </b></p><p><b>  } </b></p><p>  void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) </p><p>  { /*車輛離開*/ </p><p&

42、gt;  int i, room; </p><p>  CarNode *p,*t; </p><p>  QueueNode *q; </p><p>  /*判斷車場內(nèi)是否有車*/ </p><p>  if(Enter->top>0) /*有車*/ </p><p><b>  { <

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

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

45、>  { </b></p><p>  Temp->top++; </p><p>  Temp->stack[Temp->top]=Enter->stack[Enter->top]; </p><p>  Enter->stack[Enter->top]=NULL; </p><p&g

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

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

48、lt;/p><p>  Temp->stack[Temp->top]=NULL; </p><p>  Temp->top--; </p><p><b>  } </b></p><p>  PRINT(p,room); </p><p>  /*判斷通道上是否有車及車站是否已滿*

49、/ </p><p>  if((W->head!=W->rear)&&Enter->top<MAX) /*便道的車輛進(jìn)入車場*/ </p><p><b>  { </b></p><p>  q=W->head->next; </p><p>  t=q->d

50、ata; </p><p>  Enter->top++; </p><p>  printf("\n便道的%s號車進(jìn)入車場第%d位置.",t->num,Enter->top); </p><p>  printf("\n請輸入現(xiàn)在的時(shí)間/**:**/:"); </p><p>  s

51、canf("%d:%d",&(t->reach.hour),&(t->reach.min)); </p><p>  W->head->next=q->next; </p><p>  if(q==W->rear) W->rear=W->head; </p><p>  Enter-

52、>stack[Enter->top]=t; </p><p><b>  free(q); </b></p><p><b>  } </b></p><p>  else printf("\n便道里沒有車.\n"); </p><p><b>  } &l

53、t;/b></p><p>  else printf("\n車場里沒有車."); /*沒車*/ </p><p><b>  } </b></p><p>  void List1(SeqStackCar *S) /*列表顯示車場信息*/ </p><p><b>  { </

54、b></p><p><b>  int i; </b></p><p>  if(S->top>0) /*判斷車站內(nèi)是否有車*/ </p><p><b>  { </b></p><p>  printf("\n車場:"); </p><

55、p>  printf("\n 位置 到達(dá)時(shí)間 車牌號\n"); </p><p>  for(i=1;i<=S->top;i++) </p><p><b>  { </b></p><p>  printf(" %d ",i); </p><p>  print

56、f("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); </p><p>  puts(S->stack[i]->num); </p><p><b>  } </b></p><p><b>  } </b&

57、gt;</p><p>  else printf("\n車場里沒有車"); </p><p><b>  } </b></p><p>  void List2(LinkQueueCar *W) /*列表顯示便道信息*/ </p><p><b>  { </b></p&

58、gt;<p>  QueueNode *p; </p><p>  p=W->head->next; </p><p>  if(W->head!=W->rear) /*判斷通道上是否有車*/ </p><p><b>  { </b></p><p>  printf("

59、\n等待車輛的號碼為:"); </p><p>  while(p!=NULL) </p><p><b>  { </b></p><p>  puts(p->data->num); </p><p>  p=p->next; </p><p><b>  

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

61、) </p><p><b>  { </b></p><p>  int flag,tag; </p><p><b>  flag=1; </b></p><p>  while(flag) </p><p><b>  { </b></p&g

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

63、<p>  scanf("%d",&tag); </p><p>  if(tag>=1||tag<=3) break; </p><p>  else printf("\n請選擇 1|2|3:"); </p><p><b>  } </b></p><

64、;p>  switch(tag) </p><p><b>  { </b></p><p>  case 1:List1(&S);break; /*列表顯示車場信息*/ </p><p>  case 2:List2(&W);break; /*列表顯示便道信息*/ </p><p>  case

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論