《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)設(shè)計(jì)報(bào)告-停車場(chǎng)管理系統(tǒng)_第1頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)設(shè)計(jì)報(bào)告-停車場(chǎng)管理系統(tǒng)_第2頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)設(shè)計(jì)報(bào)告-停車場(chǎng)管理系統(tǒng)_第3頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)設(shè)計(jì)報(bào)告-停車場(chǎng)管理系統(tǒng)_第4頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)設(shè)計(jì)報(bào)告-停車場(chǎng)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)設(shè)計(jì)報(bào)題目:停車場(chǎng)管理系統(tǒng)姓名:*學(xué)號(hào):2010211998班級(jí):0491002學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院目錄1. 問(wèn)題描述032. 問(wèn)題分析033. 數(shù)據(jù)結(jié)構(gòu)描述044. 算法設(shè)計(jì)045. 程序優(yōu)缺點(diǎn)分析及優(yōu)化0 56. 程序源代碼077. 程序運(yùn)行結(jié)果138. 心得體會(huì)15附一、優(yōu)化后的程序16附二、優(yōu)化后程序的運(yùn)行結(jié)果231. 問(wèn)題描述設(shè)計(jì)一個(gè)停車場(chǎng)管理系統(tǒng)。設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的狹長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn) 出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在 最南端,最先到達(dá)的第一輛車停放在停車場(chǎng)的最北端),若停車場(chǎng)內(nèi)已停滿n輛 汽車,則后來(lái)

2、的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上 的第一輛車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它z后進(jìn)入的車輛必須 先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場(chǎng), 每倆停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。試 為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序?!净疽蟆恳詶DM停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的輸入數(shù)據(jù) 序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離 去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作 后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置; 若

3、是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上 停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)?!具x作內(nèi)容】(1)兩個(gè)棧共享空間,思考應(yīng)開辟數(shù)組的空間是多少?(2)汽車可有不同種類,則他們的占地面積不同,收費(fèi)標(biāo)準(zhǔn)也不同,如1輛客 車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當(dāng)于3輛小汽車 的占地面積。(3)汽車可以直接從便道上開走,此時(shí)排在它前面的汽車要先開走讓路,然后 再依次排到隊(duì)尾。二、問(wèn)題分析該問(wèn)題需要以棧和隊(duì)列作為基本的存儲(chǔ)結(jié)構(gòu),以順序棧模擬停車場(chǎng),以鏈 隊(duì)列模擬車場(chǎng)外的便道。汽車進(jìn)入停車場(chǎng),即是在順序棧上執(zhí)行進(jìn)棧操作,退 出停車場(chǎng)即是在順序棧

4、上執(zhí)行出棧操作;汽車進(jìn)入便道,即是在鏈隊(duì)列上執(zhí)行 入隊(duì)操作,退出便道即是在鏈隊(duì)列上執(zhí)行出隊(duì)操作。當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓 路,待該輛車開出人門外,其他車輛再按原次序進(jìn)入車場(chǎng)。設(shè)要?jiǎng)h除的元素在 順序表s t中位置為1,則從i到top z間的全部元素進(jìn)入到一個(gè)臨時(shí)棧s tl 中,其次再刪除該元素,然后將臨棧s tl的元素按照“先進(jìn)后岀”的原則重新 回到st中。若鏈隊(duì)不空,則使隊(duì)頭進(jìn)棧st,并以當(dāng)前時(shí)刻開始計(jì)費(fèi)。程序需要構(gòu)造兩個(gè)順序棧st和stl,其中st用于模擬停車場(chǎng),stl用作臨 時(shí)棧,臨時(shí)停放為給要離去的汽車讓路而從停車場(chǎng)退出來(lái)的汽車。此外還需要 構(gòu)造一

5、個(gè)鏈隊(duì)列qu用于模擬便道。1. 數(shù)據(jù)結(jié)構(gòu)描述/*定義順序棧類型*/type def struct int carn on ;/*車牌號(hào)*/int cart imcn ;/*進(jìn)場(chǎng)時(shí)間*/intt op; sqstack;/*棧指針*/*定義順序棧類型*/*定義鏈隊(duì)類型*/ typedef s truct qnod c int carn o;/*車牌號(hào)*/struct q node*next ; qnode;t ypedcf str uct qnode *front;/*隊(duì)首和隊(duì)尾指針*/qn oderear; li queue;2. 算法設(shè)計(jì)1. 對(duì)于子函數(shù)模塊,則調(diào)用順序棧的基本操作和鏈隊(duì)列的

6、基本操作。如下:/*順序棧的基木運(yùn)算算法*/void tni ts tack(sqsta ck *&s)int stackempt y (sqstack *s) int sta ckful 1 (sqs tack *s)/*s中的插入新元素*/int push (s qstack *&s , in tel, in t e2)/*刪除s的棧頂元素,并用cl,c2返回其值*/ i nt pop (sqs tack *&s, i ntvoid dispstack(sqstack*s )/*以下為鏈隊(duì)列的基本運(yùn)算算法*/vo id initque ue(liqueue *&am

7、p;q)int q ueuelength (liqueue*q)int qucu cempty (liq ucuc *q)vo id enqueue (liqueueinte)int dequ eue(liqueu e *&q, intvoid di splayqueue (liqueue*q)2. 主程序模塊 voidmai n ()初始化;do 接受命令;處理命令;whilc(命令!二”退出”);2.程序優(yōu)缺點(diǎn)分析及優(yōu)化1 程序的優(yōu)點(diǎn)在程序屮設(shè)置了 kind變量,用于保存車的類別,便于計(jì)算不同類別車的停車費(fèi) 用,如下程序段:p rintf(z,n請(qǐng)輸入車的類別【車的類別:1.代表小

8、汽車2.代表客車3.代表卡 車】:n);scanf(d", &kind);其中kind可取值1 ,2,3;若kind取2,則表示一輛客車單位時(shí)間內(nèi)的停車費(fèi) 用是一輛小汽車的2倍,若kind取3,則表示輛卡車單位口寸間內(nèi)的停車費(fèi)用 是一輛小汽車的3倍。當(dāng)然pri ntfcn請(qǐng)輸入車的類別【車的類別:1.代表小汽車2代表客車3. 代表卡車】:);中的1.2.3也可以根據(jù)實(shí)際情況改變。比如,若實(shí)際中,一 輛小汽車單位吋間內(nèi)的停車費(fèi)用是一輛客車的2倍,一輛卡車單位時(shí)間內(nèi)的停車費(fèi)用是一輛客車的4倍,則可 以改成:pr intfcn請(qǐng)輸入車的類別【車的類別:1代表客車2.代表小汽車4.代

9、表卡 車】:r);則kind可取值1,2 ,4; kind取1時(shí)對(duì)應(yīng)的是客車,表示計(jì)算停車費(fèi)用時(shí)以一 輛客車單位時(shí)間內(nèi)的停車費(fèi)用為基數(shù),若kind取2,則表示一輛小汽車單位時(shí) 間內(nèi)的停車費(fèi)用是一輛客車的2倍,若kind取4,則表示一輛卡車單位時(shí)間內(nèi) 的停車費(fèi)用是一輛客車的4倍。2. 程序的缺點(diǎn)(1) 輸入時(shí)間時(shí),程序沒(méi)有檢測(cè)錯(cuò)誤功能程序的輸入形式如下:設(shè) n=2,輸入數(shù)據(jù)為:('a' , 1, 5) , ( * ,2, 10) , ( 'd' , 1 , 15), ('a' ,3,20) , ( 'a' ,4,25) , ( &#

10、39;a ' 5,30) , ( 'd ' ,2,35),('d' , 4, 40) , ( "e' , 0, 0) o 其中:"a'表示到達(dá)(arrival) ;"d'表示離去(dep arture) ; 'e '表示輸出結(jié)束(end)。設(shè)每個(gè)輸入項(xiàng)的形式為(choose , carnumbe r, time),其中choose表示每個(gè)括 號(hào)中的第一項(xiàng)數(shù)據(jù),即a/d/e; c arnumbcr表示每個(gè)括號(hào)中的第二項(xiàng),即1/2/3; time表示每個(gè)括號(hào)中的第三項(xiàng),即5/10/15。設(shè)

11、前后兩次輸入的數(shù)據(jù)中的第三 項(xiàng)分別為timel, tim e2;則必須滿足ti me2timel0而在實(shí)際輸入過(guò)程中用 戶可能會(huì)忽略這一點(diǎn),所以應(yīng)該在輸入tim e是設(shè)置一個(gè)判斷語(yǔ)句,若前后兩 次輸入的t ime不滿足time 2mtimel,則要求用戶重新輸入,直至滿足要求為 止。(2) 程序的界面不夠清晰,一次性輸入的數(shù)據(jù)項(xiàng)比較多,容易岀錯(cuò)。3. 改進(jìn)思想(1)為了保證前后兩次輸入的ti me必須滿足time 2timel,使程序具有錯(cuò)誤檢測(cè) 功能,在程序輸入部分添加了如下代碼:print f (輸入現(xiàn)在的時(shí)刻:n);scan f (me2);while (time2 el)printf

12、(時(shí)間輸入錯(cuò)誤,請(qǐng)重新輸入:n); scanf(%d2);timel=ti me2;/timel定義為靜態(tài)變量(2)為了使程序有更清晰的界面,可在主函數(shù)中加入菜單的顯示方式。且數(shù)據(jù) 可以采用一次輸入一個(gè)數(shù)據(jù)項(xiàng),分步輸入的方式,使輸入過(guò)程少出錯(cuò)。于是可以將主函數(shù)進(jìn)行修改。(見附錄一)3. 程序源代碼#inelude stdio. h> malloc. h>/*停車場(chǎng)內(nèi)最多的停車數(shù)*/*每單位停車費(fèi)用*/*車牌號(hào)*/*進(jìn)場(chǎng)時(shí)間*/*棧指針*/*定義順序棧類型*/define n2#defin e price 2 typedef st ruetint carnon; int cartim

13、en; i nt top; sqst ack;/*定義鏈隊(duì)類型*/ typed ef struct qnode int carno; /*車牌號(hào)*/str uct qn ode* next; qn ode; tvpede f struct q node*fron t ;/*隊(duì)首和隊(duì)尾指針*/qnode*rc3r; liq ueue;/*順序棧的基本運(yùn)算算法*/ v oid initst ack(sqstac k *&s)s= (sqstack*) malloc (siz eof (sqstac k); s-top 二t ;int s tackempty (sqstack*s ) ret

14、urn(s -top二二t);int stac kful 1 (sqst ack *s) re turn (s->to p=nl);as中的插入新元素*/int push (sqs tack s, in tel, i nt c2) if (s->top=n -1) return 0;s_top+; s->carnos->top二cl ; s->cartim e s->top =e2; return 1;/*刪除s的棧頂元素,并用cl,c2返回其值*/ int pop (sqsta ck *&s, int e2)if (s->top 二二t)r

15、eturn 0;el =s->carnos->top;e2 =s->cartim es->top;s->top一一; r eturn 1;v oid dispst ack (sqstac k *s)int i;for (i=0 top ; i+)print f(d “,s>carnoi);/*以下為鏈隊(duì)列的基本運(yùn)算算法*/void ini tqucuc (liq ucuc *&q)q二(liqueue *)malloc(sizeof(liq ueue);q->front=q->r ear二null;int queuel ength(liq

16、u eue *q)in t n二0;qnod e*p二q->fr ont;while (p!=null)n+;p二p->n ext;retur n (n);int queueempty (liqueue*q)i f (q->rear 二二 nui 丄)rcturnl;elsereturn 0;voi d e nqueue (liq ueue i nt e)qn ode *s;s= (qnode *) malloc (s izeof (qnod e);s->car no二e;s>ne xt二nui丄;if (q>r car=?<ull)/*若鏈隊(duì)為空,則

17、新結(jié)點(diǎn)是隊(duì)首結(jié)點(diǎn)又是隊(duì)尾結(jié)點(diǎn)*/q->fr ont=q->rea r=s;elseq ->rcar->nc xt=s;/*將*s結(jié)點(diǎn)鏈到隊(duì)尾,r car指向它*/q->rear=s;int dequeu e(liqueue q, int )qnodet ;if (q->re ai-=xull)/*隊(duì)列為空*/ret urn 0;if (q->front=q->rcar)a隊(duì)列屮只有一個(gè)結(jié)點(diǎn)時(shí)*/ t=q->front;q->f tont=q->re ar二null;e lsc/*隊(duì)列屮有多個(gè)結(jié)點(diǎn)時(shí)*/t二q ->front

18、;q->front=q->front->nex t;e=t->ca rno;fr ee (t);retu rn 1;void displayqu cuc(liqucu c *q)qnod e*p二q->fr ont;while (p!二null)printf (d "、p->car no);p=p->n ext ;voi d main()char choose;/*用于選擇命令*/intno, el , time, c2, k ind;/*用于存放車牌號(hào)、當(dāng)前停車時(shí)刻*/int i, j;sqsta ck*st,*st 1;/*臨時(shí)棧st 1

19、,當(dāng)停車場(chǎng)中間的車要推出去時(shí),用于倒 車*/li queue *qu;initst ack (st);in itstack(st 1);initque ue (qu);pri ntf (#);prin tf;pri ntfcn#歡迎使用停車場(chǎng)管理系統(tǒng)#);pri ntf;pr intf (zzn#【輸入提示】:汽車狀態(tài)由a、d、e表示。其中,a:表示汽車 到達(dá)d:表示汽車離去,#); printfcan# e:表示輸出結(jié)束。每次輸入的數(shù)據(jù)由三項(xiàng)構(gòu)成,即:(汽車狀態(tài), 車牌號(hào),當(dāng)前時(shí)刻)#);p rintfcn#數(shù)據(jù)項(xiàng)之間以逗號(hào)分開。例如輸入示范:a, 1, 5 #);printf(# # #

20、#");prin tf cn正在讀取汽車信息n);dor-4- -4-| i i iprintf cn請(qǐng)分別輸入汽車狀態(tài)(a/d/e)、車牌號(hào)和當(dāng)前時(shí)刻(數(shù)據(jù)之間 以逗號(hào)分開):n);sea nf ( %c, %d me);switc h (choose)/ r 11 r/ #y #r #r #t #r #t>r 7 i i . i i i 丿、t% t% t% t% t% t% t% t% t% t%/ca se ' a':cas e '(:if(!stackfull (st)/*停車場(chǎng)不滿*/push (st, no, time ); printf

21、(該車在停車場(chǎng)中的位置是:dn, st ->top+l); else/*停車場(chǎng)滿*/ enqu cue (qu, no);printfcn停車場(chǎng)已滿,該車進(jìn)入便道,在便道中的位置 是:%dn,) q ueuelength (qu);bre ak;/l l l l l l l l l l l l l l l l l l l l 、/ 14 j l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l /j i - . * 1 i t> t> t> t> t> t> t> t>

22、t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t> t>/case ' d :c ase ' d :pr intfcn請(qǐng)輸入車的類別【車的類別:1代表小汽車2 .代表客 車3代表卡車】:n);sea nf (ind);for t->carnoi !=no; i+);if (i>st-top)/*要離開的汽車在便道上*/*汽車可以直接從便道上開走,此時(shí)排在它前面的汽

23、車要先開走讓路, 然后再依次排到隊(duì)尾*/while (qu->front->ca rno!=no )enqueue (qu , qu->front ->carno);/ dequeue (qu, qu->fro nt->carno );qu>front 二 qu->front->ne xt ;deque uc (qu, no);prin tf (n便道上車牌號(hào)為9紀(jì)的汽車已離開! n", no);printf(z/n當(dāng)前便道中的車輛的車牌號(hào)分別是:);d isplayqueu e(qu);prin tf (n);else /*要離

24、開的汽車在停車場(chǎng)中*/f or (j二i; j 二st->top; j+)pop (st , el, e2) ;/*el, e2用來(lái)返回被刪元素的車牌號(hào)和停車時(shí) 刻*/push(stl, el, e2) ;/*倒車到臨時(shí)棧s tl中,將el, e2插入到臨時(shí)棧中*/pop (st, el, e2) ;/*該汽車離開*/printf(z,n車牌號(hào)為9紀(jì)的汽車停車時(shí)間為:%d。停車費(fèi)用 為:dno, time e2, (timee2)*price*kind);/*對(duì)小汽車而言:當(dāng)前吋刻減去 該車當(dāng)吋停車的吋刻,再乘以價(jià) 格就是費(fèi)用,而對(duì)于客車和卡車而言,就要乘以k ind倍小汽車的價(jià)格*/w

25、hile(!stackempty (stl)/*將臨時(shí)棧 stl 重新回到 s t 中*/ pop(s tl, el, e2);push(st, el , e2);if (!queueempt y (qu) /*隊(duì)不空時(shí),將隊(duì)頭進(jìn)棧st */dequeue (qu,el);pu sh(st, el, t ime) ;/*以當(dāng)前時(shí)間開始計(jì)費(fèi)*/車場(chǎng)中的車輛dispstack(st);break ;/f嚇、r、mfzjlb t i 1!" !" !" !" !" !" !" !“ !“ !“ !“ !“ !“ !“ !“ !“

26、!“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“ !“n yr«1“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°、“°

27、、“°、“°、“°、case ' e':case' e':printf cn正在退出系統(tǒng)n);if (!stackemp ty(st)/顯示停車場(chǎng)情況pri ntfcn當(dāng)前停車場(chǎng)中的車輛的車牌號(hào)分別是:);/輸出停 車場(chǎng)中的車輛di spstack(st); printf (,n,/);else printf (,zn當(dāng)前停車場(chǎng)中無(wú)車輛nrt);b reak;/ | / f*n 'r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、r、defaul

28、一/*其他情況*/printf (z/輸入的命令錯(cuò)誤! n);break;whilc(choo hoosc!二'c');4.程序運(yùn)行結(jié)果取n二2,即停車場(chǎng)內(nèi)最多的停車數(shù)為2取price二2 ,即每單位停車費(fèi)用為2輸入數(shù)據(jù)為:('a ' ,1,5) , ( 'a ' ,2,10) , ( 'd' ,1,15),( 'a' ,3,20) , ( 'a' ,4,25) , ( 'a' 5,30) , ( 'd' ,2,35 ) , ( 'd' ,4,4 0)

29、 , ( e ,0,0)。程序演示結(jié)果如下圖所示:八、心得體會(huì)(1)該實(shí)驗(yàn)涉及到順序棧的建立、插入、刪除等操作,涉及到了鏈隊(duì)列的建立、 插入、刪除等操作。做這個(gè)實(shí)驗(yàn),加深了我對(duì)以上知識(shí)點(diǎn)的認(rèn)識(shí)和理解。(2)提高了c語(yǔ)言編程的能力。在程序設(shè)計(jì)過(guò)程中,需要經(jīng)過(guò)反復(fù)地編寫,調(diào) 試,運(yùn)行,發(fā)現(xiàn)問(wèn)題并解決問(wèn)題,在這次實(shí)驗(yàn)的設(shè)計(jì)中,我加深對(duì)程序的了解, 提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力同時(shí)我也學(xué)會(huì)了綜合以前學(xué)到的基 本知識(shí)來(lái)解決較大問(wèn)題的方法。(3)一方面我養(yǎng)成了注重程序細(xì)節(jié)的意識(shí)。例如:pri ntf(,zn請(qǐng)分別輸入汽車狀態(tài)(a/d/e)、車牌號(hào)和當(dāng)前時(shí)刻(數(shù)據(jù)之間以 逗號(hào)分開):n);scan

30、f (%c, %d, %d);%c,前面必須留一個(gè)空格,否則程序在顯示的時(shí)候就會(huì)有一些問(wèn)題。(4)另一方面我也深刻地認(rèn)識(shí)到了數(shù)據(jù)結(jié)構(gòu)這門課程的重要性。“數(shù)據(jù)結(jié) 構(gòu)”在計(jì)算機(jī)科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及到 計(jì)算機(jī)硬件的研究,而口和計(jì)算機(jī)軟件的研究有著更密切的關(guān)系,無(wú)論是編譯 程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲(chǔ)器屮的分配問(wèn)題。在研究信息檢 索時(shí)也必須 考慮如何組織數(shù)據(jù),以便使查找和存取數(shù)據(jù)元素更為方便??梢哉J(rèn) 為數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計(jì)算機(jī)硬件和計(jì)算機(jī)軟件三者之間的一個(gè)核心內(nèi)容, 是從事計(jì)算機(jī)科學(xué)研究及其應(yīng)用的科技工作者必須掌握的重要內(nèi)容附一、優(yōu)化后的程序#in st

31、d io. h>#incl mal lo c. h>#dcf in c n 2#define pri ce 2 typed ef struct/*停車場(chǎng)內(nèi)最多的停車數(shù)*/*每單位停車費(fèi)用*/int carno n ;/*車牌號(hào)*/int carti men ;/*進(jìn)場(chǎng)時(shí)間*/intto p;sqstack;/*棧指針*/*定義順序棧類型*/*定義鏈隊(duì)類型*/ typedef st ruct qnode int carno ;/*車牌號(hào)*/struc t qnode*n ext; qnod e;typedef struct qno de*front;/*隊(duì)首和隊(duì)尾指針*/ qnode

32、*re ar; li que ue;/*順序棧的基本運(yùn)算算法*/ voi d initstac k (sqstack s=(sq stack *)ma lloc (sizco f (sqstack); s->top=l;int sta ckempty (sq stack *s) return(s-top二二t);int stackf ull (sqstac k *s) retu rn(s>top二二nt);/*s中的插入新元素*/i nt push (sq stack *&s, in tel, int e2) if (s -top二二nt )returno;s->to

33、p+; s->carnos->top=e1;s->cartimes->top=e2 ; returnl;/*刪除s的棧頂元素,并用el,e2返回其值*/ i ntp op (sqstack *&s, i nt )if (s->t op=-l)ret urn 0;el二s ->carnos->top; e2=s >cartimes->top;s->top一;ret urn 1;voi d dispstac k(sqstack *s)inti;for (i=0; i top; i +)printf (,z%d z,, s->

34、c arnoi); p rintf(n);/*以下為鏈隊(duì)列的基本運(yùn)算算法*/ void initq ueue (lique ue *&q)q= (liqueue*)malloc(si zeof(lique ue);q->fr ont=q->rea r=null;int queuelength(liqueue *q)int n二0;qnode *p=q->fron t;wh 訂 e(p ! =null)n+;p=p->nex t;return (n);int qu eueempty (l iqucuc*q)if (q->re ar=null)r eturn

35、1;el sercturno ;void enq ueue (lique ue *&q, int e)qnod e *s;s = (qnode*) malloc (siz oof (qnode);s->carno =e;s>next =null;if (q->rea r=xull)/*若鏈隊(duì)為空,則新結(jié)點(diǎn)是隊(duì)首結(jié)點(diǎn)又是隊(duì)尾結(jié)點(diǎn)*/q->fron t=q->rear=s;else q->rear->next =s;/*將*s結(jié)點(diǎn)鏈到隊(duì)尾,rea r指向它*/q->r ear=s;in t dequeue (liqueue q, int &a

36、mp;e)qnode *t;i f (q->rear 二二nui丄)/*隊(duì)列為空*/rctur n 0;if (q->front=q->rear) /*隊(duì)列中只有一個(gè)結(jié)點(diǎn)時(shí)*/t=q->fr ont;q->fro nt=q->rear 二nui丄;t=q>front;q->f ront=q->fr ont->next;e=t>carn o;free (t);return 1;void d isplayqueu e(liqueue *q)qnodc *p=q->fron t;while(p !=null)pr intf (d

37、 “,p->carno );p=p->nex t ;printf (rt);vo id main()intchoose ;/*用于選擇命令*/i ntno, el, t ime2, e2, no _away;/*no_away:汽車離開時(shí)輸入車牌號(hào);time2: 當(dāng)前停車時(shí)刻;*/st aticintt imel ;/*靜態(tài)變量timel用于存放上次時(shí)刻*/int i , j;intkin d;/*車的類別*/t imel=time2 =0;sqstack *st,*stl;/*臨時(shí)棧stl,當(dāng)停車場(chǎng)中間的車要推出去時(shí),用于倒車 */liqueue *qu;initstac k(s

38、t);init stack(stl);initqueue (qu);print f(# # # # # #);printf;printf(z,n#歡迎使用停車場(chǎng)管理系統(tǒng)#);p rintf;pr i ntf (n# # # # # #pri ntf (z/n* 主菜單 *n);printf ("*1:車輛到達(dá)*n"); print f (*2:車輛離開*n);printf (*3:顯示停車場(chǎng)的車輛*n); printf(*4:顯示便道中的車輛*n);p rintf("printf (*0 :退出*n);k1 k1 lz six six six £z &#

39、163;z £z £z £z%lz %lz %lz %lz %lzslz slz six six six six six six six sixk1 k1 k1 k1 k1 k1 k1jn jn jn z|x z|x z|x z|x z|x z|x zysjn jn jn jn jn jn jn zys zys js js js js js js js js*rt);pr intfc請(qǐng)選擇:); scanf (z,%e);switch (choose) c ase 1:/# 汽車到達(dá) # printfc輸入輸入車牌號(hào)、當(dāng)前時(shí)刻(數(shù)據(jù)之間以逗號(hào)隔開):); scan

40、foid, %d,);/*依次輸入車牌號(hào)、當(dāng)前停車時(shí)刻*/ while(t) printfc時(shí)間輸入錯(cuò)誤,請(qǐng)重新輸入當(dāng)前時(shí)刻:n); scanf("%;timel二ti me2;if (!s tackfull (s t)/*停車場(chǎng)不滿*/push (st, no, timel); printf (該車在停車場(chǎng)中的位置是:drt, st->top+l);e ise/*停車場(chǎng)滿*/ enque ue (qu, no);printfcn停車場(chǎng)已滿,該車進(jìn)入便道,在便道中的位置 是:%dn, qu euelength (qu);brea k;case 2:/# 汽車離開 # print

41、f (,z輸入車牌號(hào):n); sc anf(no_away);p rintfc請(qǐng)輸入車的類別【車的類別:1代表小汽車2.代表客車 3.代表卡車】:n);scan f (nd);prin tf (輸入現(xiàn)在的時(shí)刻:n);/*現(xiàn)在的時(shí)刻timel得大丁之前的 時(shí)刻 ti mel*/seanf (e2);while(l)printf c時(shí)間輸入錯(cuò)誤,請(qǐng)重新輸入:n);s canf ("%d",t imel=time2 ;for (i=o;ca rnoi !=no ; i+);if (i>st->top)/*汽車可以査接從便道上開走,此時(shí)排在它前面的汽車 要先開走讓路,然后再依次排到隊(duì)尾*/while (q u>front->c3rno!=no) "enq ueue (qu, qu ->front->c arno );qu->front 二qu->fron t->next ;dequ

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論