

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 停車場管理的實現(xiàn)</b></p><p> 一、程序中所采用的數(shù)據(jù)結(jié)構(gòu)及存儲結(jié)構(gòu)的說明</p><p> 以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)。</p><p> 程序中分別采用了“?!焙汀瓣犃小弊鳛槠浯鎯Y(jié)構(gòu)。</p>
2、<p> “?!钡亩x可知,每一次入棧的元素都在原棧頂元素之上成為新的元素,每一次出棧的元素總是當前棧頂元素使次棧元素成為新的棧頂元素,即最后進棧者先出棧。程序中采用的結(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> “隊列”是限定所有插入操作只能在表的一端進行,而所有的刪除操作都只能在表的另一端進行。插入端叫隊尾,刪除端叫對頭。按先進先出規(guī)則進行。程序中采用的結(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> 二、算法的設計思想</b></p><p> 由于停車場是一個狹窄通道,而且只有一個大門可供汽車進出,問題要求汽車
5、停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列。由此很容易聯(lián)想到數(shù)據(jù)結(jié)構(gòu)中的堆棧模型,因此可首先設計一個堆棧,以堆棧來模擬停車場,又每個汽車的車牌號都不一樣,這樣一來可以根據(jù)車牌號準確找到汽車位置,所以堆棧里的數(shù)據(jù)元素我設計成汽車的車牌號。當停車場內(nèi)某輛車要離開時,在他之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入停車場。這是個一退一進的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設計一個堆
6、棧,以之來暫時存放為出站汽車暫時讓道的汽車車牌號。當停車場滿后,繼續(xù)進來的汽車需要停放在停車場旁邊的便道上等候,若停車場有汽車開走,則按排隊的先后順序依次進站,最先進入便道的汽車將會最先進入停車場,這完全是一個先進先出模型,因此可設計一個隊列來模擬便道,隊列中的數(shù)據(jù)元素仍然設計成汽車的車牌號。另外,停車場根據(jù)汽車在停車場內(nèi)停放的總時長來收費的,在便道上的時間不計費,因此必須記錄車輛進入停車場時的時間,車輛離開停車場時的時間不需要記錄,當
7、從終端輸入時可直接使用。由于時間不象汽車一樣需要讓道</p><p> 說明:對時間復雜度的分析,均指在最壞情況下的時間復雜度。</p><p><b> 在棧結(jié)構(gòu)中:</b></p><p> (1) 初始化棧(即車庫),使車庫為空的,此時,時間復雜度=O(max)。</p><p> (2) 停車最壞的情況是
8、要車位已經(jīng)滿,此時,時時間復雜度=O(1)。</p><p> (3) 關于車輛離開的時間復雜度=O(max)。</p><p> (4) 車場信息的顯示的時間復雜度=O(1)。</p><p><b> 在隊列結(jié)構(gòu)中:</b></p><p> (1) 出場車的信息的時間復雜度=O(1)。</p>
9、<p> (2) 判斷通道上是否有車及車站是否已滿,此時,時間復雜度O=(max)。</p><p> (3) 車輛停車費用的時間復雜度O=(1)。</p><p> 四.設計原理、框圖 </p><p><b> 五.運行結(jié)果</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; /*時間結(jié)點*/ </p><p> typedef struct node{ </p><p> char num[10]; </p><p> Time reach; &
14、lt;/p><p> Time leave; </p><p> }CarNode; /*車輛信息結(jié)點*/ </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.退出系統(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; /*車輛到達*/ </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> /*判斷車場內(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) /*便道的車輛進入車場*/ </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請輸入現(xià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) /*判斷車站內(nèi)是否有車*/ </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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 停車場管理系統(tǒng)課程設計
- 停車場管理系統(tǒng)課程設計報告
- 停車場系統(tǒng)課程設計
- 課程設計---停車場管理
- 課程設計報告-- 停車場管理系統(tǒng)
- 課程設計報告—停車場管理系統(tǒng)
- 智能停車場課程設計--校園智能停車場的系統(tǒng)設計
- 微機課程設計—停車場出入管理系統(tǒng)
- 停車場管理問題課程設計
- 停車場管理系統(tǒng)c++課程設計
- 校園智能停車場的系統(tǒng)設計-智能停車場課程設計
- 停車場管理問題系統(tǒng)課程設計報告
- c語言課程設計 停車場管理系統(tǒng)
- 課程設計報告---停車場車位管理
- 地下停車場課程設計
- 停車場管理課程設計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設計--停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設計---停車場管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設計-- 停車場管理系統(tǒng)
- 大型停車場指示系統(tǒng)課程設計
評論
0/150
提交評論