版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 停車場(chǎng)管理的實(shí)現(xiàn)</b></p><p> 一、程序中所采用的數(shù)據(jù)結(jié)構(gòu)及存儲(chǔ)結(jié)構(gòu)的說明</p><p> 以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的輸入數(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; /*模擬車庫(kù)*/</p><p> “隊(duì)列”是限定所有插入操作只能在表的一端進(jìn)行,而所有的刪除操作都只能在表的另一端進(jìn)行。插入端叫隊(duì)尾,刪除端叫對(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> 由于停車場(chǎng)是一個(gè)狹窄通道,而且只有一個(gè)大門可供汽車進(jìn)出,問題要求汽車
5、停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列。由此很容易聯(lián)想到數(shù)據(jù)結(jié)構(gòu)中的堆棧模型,因此可首先設(shè)計(jì)一個(gè)堆棧,以堆棧來模擬停車場(chǎng),又每個(gè)汽車的車牌號(hào)都不一樣,這樣一來可以根據(jù)車牌號(hào)準(zhǔn)確找到汽車位置,所以堆棧里的數(shù)據(jù)元素我設(shè)計(jì)成汽車的車牌號(hào)。當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在他之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入停車場(chǎng)。這是個(gè)一退一進(jìn)的過程,而且讓道的汽車必須保持原有的先后順序,因此可再設(shè)計(jì)一個(gè)堆
6、棧,以之來暫時(shí)存放為出站汽車暫時(shí)讓道的汽車車牌號(hào)。當(dāng)停車場(chǎng)滿后,繼續(xù)進(jìn)來的汽車需要停放在停車場(chǎng)旁邊的便道上等候,若停車場(chǎng)有汽車開走,則按排隊(duì)的先后順序依次進(jìn)站,最先進(jìn)入便道的汽車將會(huì)最先進(jìn)入停車場(chǎng),這完全是一個(gè)先進(jìn)先出模型,因此可設(shè)計(jì)一個(gè)隊(duì)列來模擬便道,隊(duì)列中的數(shù)據(jù)元素仍然設(shè)計(jì)成汽車的車牌號(hào)。另外,停車場(chǎng)根據(jù)汽車在停車場(chǎng)內(nèi)停放的總時(shí)長(zhǎng)來收費(fèi)的,在便道上的時(shí)間不計(jì)費(fèi),因此必須記錄車輛進(jìn)入停車場(chǎng)時(shí)的時(shí)間,車輛離開停車場(chǎng)時(shí)的時(shí)間不需要記錄,當(dāng)
7、從終端輸入時(shí)可直接使用。由于時(shí)間不象汽車一樣需要讓道</p><p> 說明:對(duì)時(shí)間復(fù)雜度的分析,均指在最壞情況下的時(shí)間復(fù)雜度。</p><p><b> 在棧結(jié)構(gòu)中:</b></p><p> (1) 初始化棧(即車庫(kù)),使車庫(kù)為空的,此時(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) 車場(chǎng)信息的顯示的時(shí)間復(fù)雜度=O(1)。</p><p><b> 在隊(duì)列結(jié)構(gòu)中:</b></p><p> (1) 出場(chǎng)車的信息的時(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)入車場(chǎng):</b
10、></p><p><b> 車場(chǎng)已滿:</b></p><p><b> 車輛離開,并收費(fèi):</b></p><p><b> 列出車場(chǎng)信息:</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 /*車庫(kù)容量*/ </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; /*模擬車場(chǎng)*/ </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) /*打印出場(chǎng)車的
31、信息*/ </p><p><b> { </b></p><p> int A1,A2,B1,B2; </p><p> printf("\n請(qǐng)輸入離開的時(shí)間:/**:**/"); </p><p> scanf("%d:%d",&(p->leave.hou
32、r),&(p->leave.min)); </p><p> printf("\n離開車輛的車牌號(hào)為:"); </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請(qǐng)輸入車牌號(hào)(例如:閩A1234):"); </p><p> gets(p->num); </p><p> if(Enter->top&
37、lt;MAX) /*車場(chǎng)未滿,車進(jìn)車場(chǎng)*/ </p><p><b> { </b></p><p> Enter->top++; </p><p> printf("\n車輛在車場(chǎng)第%d位置.",Enter->top); </p><p> printf("\n請(qǐng)輸入到
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 /*車場(chǎng)已滿,車進(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> /*判斷車場(chǎng)內(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請(qǐng)輸入車在車場(chǎng)的位置/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)入車場(chǎng)*/ </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號(hào)車進(jìn)入車場(chǎng)第%d位置.",t->num,Enter->top); </p><p> printf("\n請(qǐng)輸入現(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車場(chǎng)里沒有車."); /*沒車*/ </p><p><b> } </b></p><p> void List1(SeqStackCar *S) /*列表顯示車場(chǎng)信息*/ </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車場(chǎng):"); </p><
55、p> printf("\n 位置 到達(dá)時(shí)間 車牌號(hào)\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車場(chǎng)里沒有車"); </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等待車輛的號(hào)碼為:"); </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請(qǐng)選擇 1|2|3:"); </p><p> printf("\n1.車場(chǎng)\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請(qǐng)選擇 1|2|3:"); </p><p><b> } </b></p><
64、;p> switch(tag) </p><p><b> { </b></p><p> case 1:List1(&S);break; /*列表顯示車場(chǎng)信息*/ </p><p> case 2:List2(&W);break; /*列表顯示便道信息*/ </p><p> case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)
- 停車場(chǎng)管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 停車場(chǎng)系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)---停車場(chǎng)管理
- 課程設(shè)計(jì)報(bào)告-- 停車場(chǎng)管理系統(tǒng)
- 課程設(shè)計(jì)報(bào)告—停車場(chǎng)管理系統(tǒng)
- 智能停車場(chǎng)課程設(shè)計(jì)--校園智能停車場(chǎng)的系統(tǒng)設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)—停車場(chǎng)出入管理系統(tǒng)
- 停車場(chǎng)管理問題課程設(shè)計(jì)
- 停車場(chǎng)管理系統(tǒng)c++課程設(shè)計(jì)
- 校園智能停車場(chǎng)的系統(tǒng)設(shè)計(jì)-智能停車場(chǎng)課程設(shè)計(jì)
- 停車場(chǎng)管理問題系統(tǒng)課程設(shè)計(jì)報(bào)告
- c語(yǔ)言課程設(shè)計(jì) 停車場(chǎng)管理系統(tǒng)
- 課程設(shè)計(jì)報(bào)告---停車場(chǎng)車位管理
- 地下停車場(chǎng)課程設(shè)計(jì)
- 停車場(chǎng)管理課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---停車場(chǎng)管理系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 停車場(chǎng)管理系統(tǒng)
- 大型停車場(chǎng)指示系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論