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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  停車場管理的實現</b></p><p>  一、程序中所采用的數據結構及存儲結構的說明</p><p>  以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數據序列進行模擬管理。棧以順序結構實現,隊列以鏈表實現。</p><p>  程序中分別采用了“?!焙汀瓣犃小弊鳛槠浯鎯Y構。</p>

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

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

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

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

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

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

8、要車位已經滿,此時,時時間復雜度=O(1)。</p><p>  (3) 關于車輛離開的時間復雜度=O(max)。</p><p>  (4) 車場信息的顯示的時間復雜度=O(1)。</p><p><b>  在隊列結構中:</b></p><p>  (1) 出場車的信息的時間復雜度=O(1)。</p>

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

10、></p><p><b>  車場已滿:</b></p><p><b>  車輛離開,并收費:</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 /*每車每分鐘費用*/ </p><p>  typedef struct time{ </p><p>

13、;  int hour; </p><p><b>  int min; </b></p><p>  }Time; /*時間結點*/ </p><p>  typedef struct node{ </p><p>  char num[10]; </p><p>  Time reach; &

14、lt;/p><p>  Time leave; </p><p>  }CarNode; /*車輛信息結點*/ </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 *); /*車輛到達*/ </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); /*初始化讓路的臨時棧*/ </p><p>  InitQueue(&Wai

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

22、><p>  printf(" 3.列表顯示 "); </p><p>  printf(" 4.退出系統"); </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; /*車輛到達*/ </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請輸入離開的時間:/**:**/"); </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:%d",p->reach.hour,p->reach.min); &l

33、t;/p><p>  printf("離開時間為: %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應交費用為:%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) /*車輛到達*/ </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) /*車場未滿,車進車場*/ </p><p><b>  { </b></p><p>  Enter->top++; </p><p>  printf("\n車輛在車場第%d位置.",Enter->top); </p><p>  printf("\n請輸入到

38、達時間:/**:**/"); </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 /*車場已滿,車進便道*/ </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>  /*判斷車場內是否有車*/ </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) /*便道的車輛進入車場*/ </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號車進入車場第%d位置.",t->num,Enter->top); </p><p>  printf("\n請輸入現在的時間/**:**/:"); </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) /*判斷車站內是否有車*/ </p><p><b>  { </b></p><p>  printf("\n車場:"); </p><

55、p>  printf("\n 位置 到達時間 車牌號\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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論