




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《停車場管理系統(tǒng)》實驗設(shè)計報告17400字
重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院《數(shù)據(jù)結(jié)構(gòu)》實驗設(shè)計報告題目:停車場管理系統(tǒng)姓名:**學(xué)號:2010211998班級:0491002學(xué)院:計算機科學(xué)與技術(shù)學(xué)院1重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院目錄一、問題描述………03二、問題分析………03三、數(shù)據(jù)結(jié)構(gòu)描述…………………04四、算法設(shè)計………04五、程序優(yōu)缺點分析及優(yōu)化………05六、程序源代碼……………………07七、程序運行結(jié)果…………………13八、心得體會………15附一、優(yōu)化后的程序…………………16附二、優(yōu)化后程序的運行結(jié)果………232重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院一、問題描述設(shè)計一個停車場管理系統(tǒng)。設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在停車場的最北端),若停車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序?!净疽蟆恳詶DM停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車?到達(dá)?或?離去?信息、汽車牌照號碼以及到達(dá)或離去的時刻。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。【選作內(nèi)容】(1)兩個棧共享空間,思考應(yīng)開辟數(shù)組的空間是多少?(2)汽車可有不同種類,則他們的占地面積不同,收費標(biāo)準(zhǔn)也不同,如1輛客車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當(dāng)于3輛小汽車的占地面積。(3)汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。二、問題分析該問題需要以棧和隊列作為基本的存儲結(jié)構(gòu),以順序棧模擬停車場,以鏈隊列模擬車場外的便道。汽車進(jìn)入停車場,即是在順序棧上執(zhí)行進(jìn)棧操作,退出停車場即是在順序棧上執(zhí)行出棧操作;汽車進(jìn)入便道,即是在鏈隊列上執(zhí)行入隊操作,退出便道即是在鏈隊列上執(zhí)行出隊操作。當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場。設(shè)要刪除的元素在順序表St中位置為i,則從i到top之間的全部元素進(jìn)入到一個臨時棧St1中,其次再刪除該元素,然后將臨棧St1的元素按照?先進(jìn)后出?的原則重新回到St中。若鏈隊不空,則使隊頭進(jìn)棧St,并以當(dāng)前時刻開始計費。程序需要構(gòu)造兩個順序棧St和St1,其中St用于模擬停車場,St1用作臨時棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。此外還需要構(gòu)3重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院造一個鏈隊列Qu用于模擬便道。三、數(shù)據(jù)結(jié)構(gòu)描述/*定義順序棧類型*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;四、算法設(shè)計1.對于子函數(shù)模塊,則調(diào)用順序棧的基本操作和鏈隊列的基本操作。如下:/*順序棧的基本運算算法*/voidInitStack(SqStack*&s)intStackEmpty(SqStack*s)intStackFull(SqStack*s)/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2)4重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2)voidDispStack(SqStack*s)/*以下為鏈隊列的基本運算算法*/voidInitQueue(LiQueue*&q)intQueueLength(LiQueue*q)intQueueEmpty(LiQueue*q)voidenQueue(LiQueue*&q,inte)}intdeQueue(LiQueue*&q,int&e)voidDisplayQueue(LiQueue*q)2.主程序模塊voidmain(){初始化;do{接受命令;處理命令;}while(命令!=?退出?);}五、程序優(yōu)缺點分析及優(yōu)化1.程序的優(yōu)點在程序中設(shè)置了kind變量,用于保存車的類別,便于計算不同類別車的停車費用,如下程序段:printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");scanf("%d",&kind);其中kind可取值1,2,3;若kind取2,則表示一輛客車單位時間內(nèi)的停車費用5重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院是一輛小汽車的2倍,若kind取3,則表示一輛卡車單位時間內(nèi)的停車費用是一輛小汽車的3倍。當(dāng)然printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");中的1.2.3也可以根據(jù)實際情況改變。比如,若實際中,一輛小汽車單位時間內(nèi)的停車費用是一輛客車的2倍,一輛卡車單位時間內(nèi)的停車費用是一輛客車的4倍,則可以改成:printf("\n請輸入車的類別【車的類別:1.代表客車2.代表小汽車4.代表卡車】:\n");則kind可取值1,2,4;kind取1時對應(yīng)的是客車,表示計算停車費用時以一輛客車單位時間內(nèi)的停車費用為基數(shù),若kind取2,則表示一輛小汽車單位時間內(nèi)的停車費用是一輛客車的2倍,若kind取4,則表示一輛卡車單位時間內(nèi)的停車費用是一輛客車的4倍。2.程序的缺點(1)輸入時間時,程序沒有檢測錯誤功能程序的輸入形式如下:設(shè)n=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,40),(‘E’,0,0)。其中:‘A’表示到達(dá)(arrival);‘D’表示離去(departure);‘E’表示輸出結(jié)束(end)。設(shè)每個輸入項的形式為(Choose,CarNumber,Time),其中Choose表示每個括號中的第一項數(shù)據(jù),即A/D/E;CarNumber表示每個括號中的第二項,即1/2/3;Time表示每個括號中的第三項,即5/10/15。設(shè)前后兩次輸入的數(shù)據(jù)中的第三項分別為Time1,Time2;則必須滿足Time2≧Time1。而在實際輸入過程中用戶可能會忽略這一點,所以應(yīng)該在輸入Time是設(shè)置一個判斷語句,若前后兩次輸入的Time不滿足Time2≧Time1,則要求用戶重新輸入,直至滿足要求為止。(2)程序的界面不夠清晰,一次性輸入的數(shù)據(jù)項比較多,容易出錯。3.改進(jìn)思想(1)為了保證前后兩次輸入的Time必須滿足Time2≧Time1,使程序具有錯誤檢測功能,在程序輸入部分添加了如下代碼:printf("輸入現(xiàn)在的時刻:\n");scanf("%d",&time2);while(time2<time1){printf("時間輸入錯誤,請重新輸入:\n");scanf("%d",&time2);6重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院}time1=time2;//time1定義為靜態(tài)變量(2)為了使程序有更清晰的界面,可在主函數(shù)中加入菜單的顯示方式。且數(shù)據(jù)可以采用一次輸入一個數(shù)據(jù)項,分步輸入的方式,使輸入過程少出錯。于是可以將主函數(shù)進(jìn)行修改。(見附錄一)六、程序源代碼#include<stdio.h>#include<malloc.h>#defineN2/*停車場內(nèi)最多的停車數(shù)*/#definePrice2/*每單位停車費用*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;/*順序棧的基本運算算法*/voidInitStack(SqStack*&s){s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;7重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院}intStackEmpty(SqStack*s){return(s->top==-1);}intStackFull(SqStack*s){return(s->top==N-1);}/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2){if(s->top==N-1)return0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return1;}/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2){if(s->top==-1)return0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return1;}voidDispStack(SqStack*s){inti;for(i=0;i<=s->top;i++)printf("%d",s->CarNo[i]);printf("\n");}/*以下為鏈隊列的基本運算算法*/8重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院voidInitQueue(LiQueue*&q){q=(LiQueue*)malloc(sizeof(LiQueue));q->front=q->rear=NULL;}intQueueLength(LiQueue*q){intn=0;QNode*p=q->front;while(p!=NULL){n++;p=p->next;}return(n);}intQueueEmpty(LiQueue*q){if(q->rear==NULL)return1;elsereturn0;}voidenQueue(LiQueue*&q,inte){QNode*s;s=(QNode*)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若鏈隊為空,則新結(jié)點是隊首結(jié)點又是隊尾結(jié)點*/q->front=q->rear=s;else{q->rear->next=s;/*將*s結(jié)點鏈到隊尾,rear指向它*/q->rear=s;}}intdeQueue(LiQueue*&q,int&e){QNode*t;if(q->rear==NULL)/*隊列為空*/return0;9重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院if(q->front==q->rear)/*隊列中只有一個結(jié)點時*/{t=q->front;q->front=q->rear=NULL;}else/*隊列中有多個結(jié)點時*/{t=q->front;q->front=q->front->next;}e=t->CarNo;free(t);return1;}voidDisplayQueue(LiQueue*q){QNode*p=q->front;while(p!=NULL){printf("%d",p->CarNo);p=p->next;}}voidmain(){charchoose;/*用于選擇命令*/intno,e1,time,e2,kind;/*用于存放車牌號、當(dāng)前停車時刻*/inti,j;SqStack*St,*St1;/*臨時棧St1,當(dāng)停車場中間的車要推出去時,用于倒車*/LiQueue*Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf("##############################################################################");printf("\n##");printf("\n#歡迎使用停車場管理系統(tǒng)#");10重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n##");printf("\n#【輸入提示】:汽車狀態(tài)由A、D、E表示。其中,A:表示汽車到達(dá)D:表示汽車離去,#");printf("\n#E:表示輸出結(jié)束。每次輸入的數(shù)據(jù)由三項構(gòu)成,即:(汽車狀態(tài),車牌號,當(dāng)前時刻)#");printf("\n#數(shù)據(jù)項之間以逗號分開。例如輸入示范:A,1,5#");printf("\n##############################################################################\n");printf("\n正在讀取汽車信息...\n");do{printf("\n*****************************************************************");printf("\n請分別輸入汽車狀態(tài)(A/D/E)、車牌號和當(dāng)前時刻(數(shù)據(jù)之間以逗號分開):\n");scanf("%c,%d,%d",&choose,&no,&time);switch(choose){/***************************汽車到達(dá)******************************/case'A':case'a':if(!StackFull(St))/*停車場不滿*/{Push(St,no,time);printf("該車在停車場中的位置是:%d\n",St->top+1);}else/*停車場滿*/{enQueue(Qu,no);printf("\n停車場已滿,該車進(jìn)入便道,在便道中的位置是:%d\n",QueueLength(Qu));}break;/*************************汽車離開********************************/case'D':case'd':11重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");scanf("%d",&kind);for(i=0;i<=St->top&&St->CarNo[i]!=no;i++);if(i>St->top)/*要離開的汽車在便道上*/{/*汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾*/while(Qu->front->CarNo!=no){enQueue(Qu,Qu->front->CarNo);//deQueue(Qu,Qu->front->CarNo);Qu->front=Qu->front->next;}deQueue(Qu,no);printf("\n便道上車牌號為%d的汽車已離開!\n",no);printf("\n當(dāng)前便道中的車輛的車牌號分別是:");DisplayQueue(Qu);printf("\n");}else/*要離開的汽車在停車場中*/{for(j=i;j<=St->top;j++){Pop(St,e1,e2);/*e1,e2用來返回被刪元素的車牌號和停車時刻*/Push(St1,e1,e2);/*倒車到臨時棧St1中,將e1,e2插入到臨時棧中*/}Pop(St,e1,e2);/*該汽車離開*/printf("\n車牌號為%d的汽車停車時間為:%d。停車費用為:%d\n",no,time-e2,(time-e2)*Price*kind);/*對小汽車而言:當(dāng)前時刻減去該車當(dāng)時停車的時刻,再乘以價格就是費用,而對于客車和卡車而言,就要乘以kind倍小汽車的價格*/while(!StackEmpty(St1))/*將臨時棧St1重新回到St中*/{Pop(St1,e1,e2);Push(St,e1,e2);}if(!QueueEmpty(Qu))/*隊不空時,將隊頭進(jìn)棧St*/{12重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院deQueue(Qu,e1);Push(St,e1,time);/*以當(dāng)前時間開始計費*/}printf("\n當(dāng)前停車場中的車輛的車牌號分別是:");//輸出停車場中的車輛DispStack(St);}break;/************************結(jié)束*********************************/case'E':case'e':printf("\n正在退出系統(tǒng)...\n");if(!StackEmpty(St))//顯示停車場情況{printf("\n當(dāng)前停車場中的車輛的車牌號分別是:");//輸出停車場中的車輛DispStack(St);printf("\n");}elseprintf("\n當(dāng)前停車場中無車輛\n\n");break;/************************結(jié)束*********************************/default:/*其他情況*/printf("輸入的命令錯誤!\n");break;}}while(choose!='E'&&choose!='e');}七、程序運行結(jié)果取N=2,即停車場內(nèi)最多的停車數(shù)為2取Price=2,即每單位停車費用為2輸入數(shù)據(jù)為:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),13重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示結(jié)果如下圖所示:14重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院八、心得體會(1)該實驗涉及到順序棧的建立、插入、刪除等操作,涉及到了鏈隊列的建立、插入、刪除等操作。做這個實驗,加深了我對以上知識點的認(rèn)識和理解。(2)提高了C語言編程的能力。在程序設(shè)計過程中,需要經(jīng)過反復(fù)地編寫,調(diào)試,運行,發(fā)現(xiàn)問題并解決問題,在這次實驗的設(shè)計中,我加深對程序的了解,提高自己的實際動手能力和獨立思考的能力同時我也學(xué)會了綜合以前學(xué)到的基本知識來解決較大問題的方法。(3)一方面我養(yǎng)成了注重程序細(xì)節(jié)的意識。例如:printf("\n請分別輸入汽車狀態(tài)(A/D/E)、車牌號和當(dāng)前時刻(數(shù)據(jù)之間以逗號分開):\n");scanf("%c,%d,%d",&choose,&no,&time);15重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院%c,前面必須留一個空格,否則程序在顯示的時候就會有一些問題。(4)另一方面我也深刻地認(rèn)識到了《數(shù)據(jù)結(jié)構(gòu)》這門課程的重要性。“數(shù)據(jù)結(jié)構(gòu)”在計算機科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及到計算機硬件的研究,而且和計算機軟件的研究有著更密切的關(guān)系,無論是編譯程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲器中的分配問題。在研究信息檢索時也必須考慮如何組織數(shù)據(jù),以便使查找和存取數(shù)據(jù)元素更為方便。可以認(rèn)為數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機硬件和計算機軟件三者之間的一個核心內(nèi)容,是從事計算機科學(xué)研究及其應(yīng)用的科技工作者必須掌握的重要內(nèi)容附一、優(yōu)化后的程序#include<stdio.h>#include<malloc.h>#defineN2/*停車場內(nèi)最多的停車數(shù)*/#definePrice2/*每單位停車費用*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;/*順序棧的基本運算算法*/voidInitStack(SqStack*&s){s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;}16重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院intStackEmpty(SqStack*s){return(s->top==-1);}intStackFull(SqStack*s){return(s->top==N-1);}/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2){if(s->top==N-1)return0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return1;}/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2){if(s->top==-1)return0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return1;}voidDispStack(SqStack*s){inti;for(i=0;i<=s->top;i++)printf("%d",s->CarNo[i]);printf("\n");}/*以下為鏈隊列的基本運算算法*/voidInitQueue(LiQueue*&q){q=(LiQueue*)malloc(sizeof(LiQueue));17重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院q->front=q->rear=NULL;}intQueueLength(LiQueue*q){intn=0;QNode*p=q->front;while(p!=NULL){n++;p=p->next;}return(n);}intQueueEmpty(LiQueue*q){if(q->rear==NULL)return1;elsereturn0;}voidenQueue(LiQueue*&q,inte){QNode*s;s=(QNode*)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若鏈隊為空,則新結(jié)點是隊首結(jié)點又是隊尾結(jié)點*/q->front=q->rear=s;else{q->rear->next=s;/*將*s結(jié)點鏈到隊尾,rear指向它*/q->rear=s;}}intdeQueue(LiQueue*&q,int&e){QNode*t;if(q->rear==NULL)/*隊列為空*/return0;if(q->front==q->rear)/*隊列中只有一個結(jié)點時*/{t=q->front;18重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院q->front=q->rear=NULL;}else/*隊列中有多個結(jié)點時*/{t=q->front;q->front=q->front->next;}e=t->CarNo;free(t);return1;}voidDisplayQueue(LiQueue*q){QNode*p=q->front;while(p!=NULL){printf("%d",p->CarNo);p=p->next;}printf("\n");}voidmain(){intchoose;/*用于選擇命令*/intno,e1,time2,e2,no_away;/*no_away:汽車離開時輸入車牌號;time2:當(dāng)前停車時刻;*/staticinttime1;/*靜態(tài)變量time1用于存放上次時刻*/inti,j;intkind;/*車的類別*/time1=time2=0;SqStack*St,*St1;/*臨時棧St1,當(dāng)停車場中間的車要推出去時,用于倒車*/LiQueue*Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf("########################################################");printf("\n##");19重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n#歡迎使用停車場管理系統(tǒng)#");printf("\n##");printf("\n########################################################\n");do{printf("\n********************主菜單****************************\n");printf("**1:車輛到達(dá)**\n");printf("**2:車輛離開**\n");printf("**3:顯示停車場的車輛**\n");printf("**4:顯示便道中的車輛**\n");printf("**0:退出**\n");printf("********************************************************\n");printf("請選擇:");scanf("%d",&choose);switch(choose){case1://######################汽車到達(dá)###########################printf("輸入輸入車牌號、當(dāng)前時刻(數(shù)據(jù)之間以逗號隔開):\n");scanf("%d,%d",&no,&time2);/*依次輸入車牌號、當(dāng)前停車時刻*/while(time2<time1){printf("時間輸入錯誤,請重新輸入當(dāng)前時刻:\n");scanf("%d",&time2);}time1=time2;if(!StackFull(St))/*停車場不滿*/{Push(St,no,time1);printf("該車在停車場中的位置是:%d\n",St->top+1);20重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院}else/*停車場滿*/{enQueue(Qu,no);printf("\n停車場已滿,該車進(jìn)入便道,在便道中的位置是:%d\n",QueueLength(Qu));}break;case2://#######################汽車離開#########################printf("輸入車牌號:\n");scanf("%d",&no_away);printf("請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");scanf("%d",&kind);printf("輸入現(xiàn)在的時刻:\n");/*現(xiàn)在的時刻time1得大于之前的時刻time1*/scanf("%d",&time2);while(time2<time1){printf("時間輸入錯誤,請重新輸入:\n");scanf("%d",&time2);}time1=time2;for(i=0;i<=St->top&&St->CarNo[i]!=no_away;i++);if(i>St->top)/*汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾*/{while(Qu->front->CarNo!=no_away){enQueue(Qu,Qu->front->CarNo);Qu->front=Qu->front->next;}deQueue(Qu,no_away);printf("\n便道上車牌號為%d的汽車已離開!\n",no_away);printf("\n當(dāng)前便道中的車輛的車牌號分別是:");DisplayQueue(Qu);printf("\n");}else21重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院{for(j=i;j<=St->top;j++){Pop(St,e1,e2);/*e1,e2用來返回被刪元素的車牌號和停車時刻*/Push(St1,e1,e2);/*倒車到臨時棧St1中,將e1,e2插入到臨時棧中*/}Pop(St,e1,e2);/*該汽車離開*/printf("\n車牌號為%d的汽車停車費用為:%d\n",no_away,(time2-e2)*Price*kind);/*對小汽車而言:當(dāng)前時刻減去該車當(dāng)時停車的時刻,再乘以價格就是費用,而對于客車和卡車而言,就要乘以kind倍小汽車的價格*/while(!StackEmpty(St1))/*將臨時棧St1重新回到St中*/{Pop(St1,e1,e2);Push(St,e1,e2);}if(!QueueEmpty(Qu))/*隊不空時,將隊頭進(jìn)棧St*/{deQueue(Qu,e1);Push(St,e1,time1);/*以當(dāng)前時間開始計費*/}}break;case3://###################顯示停車場情況############################if(!StackEmpty(St)){printf("當(dāng)前停車場中的車輛的車牌號分別是:");/*輸出停車場中的車輛*/DispStack(St);}elseprintf("停車場中無車輛!\n");break;case4://####################顯示便道情況#############################if(!QueueEmpty(Qu)){22重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("當(dāng)前便道中的車輛的車牌號分別是:");/*輸出便道中的車輛*/DisplayQueue(Qu);}elseprintf("便道中無車輛!\n");break;case0://######################結(jié)束###############################printf("\n正在退出系統(tǒng)...\n");if(!StackEmpty(St)){printf("當(dāng)前停車場中的車輛的車牌號分別是:");/*輸出停車場中的車輛*/DispStack(St);}if(!QueueEmpty(Qu)){printf("當(dāng)前便道中的車輛的車牌號分別是:");/*輸出便道中的車輛*/DisplayQueue(Qu);}break;/**********************************************************/default:/*其他情況*/printf("輸入的命令錯誤!\n");break;}}while(choose!=0);}附二、優(yōu)化后程序的運行結(jié)果取N=2,即停車場內(nèi)最多的停車數(shù)為2取Price=2,即每單位停車費用為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,40),(‘E’,0,0)。程序演示結(jié)果如下圖所示:23重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院24重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院25重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院26重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院27重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院28
+《停車場管理系統(tǒng)》實驗設(shè)計報告發(fā)表于:2023.1.1來自:字?jǐn)?shù):17445手機看范文重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院《數(shù)據(jù)結(jié)構(gòu)》實驗設(shè)計報告題目:停車場管理系統(tǒng)姓名:**學(xué)號:2010211998班級:0491002學(xué)院:計算機科學(xué)與技術(shù)學(xué)院1重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院目錄一、問題描述………03二、問題分析………03三、數(shù)據(jù)結(jié)構(gòu)描述…………………04四、算法設(shè)計………04五、程序優(yōu)缺點分析及優(yōu)化………05六、程序源代碼……………………07七、程序運行結(jié)果…………………13八、心得體會………15附一、優(yōu)化后的程序…………………16附二、優(yōu)化后程序的運行結(jié)果………232重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院一、問題描述設(shè)計一個停車場管理系統(tǒng)。設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在停車場的最北端),若停車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序?!净疽蟆恳詶DM停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車?到達(dá)?或?離去?信息、汽車牌照號碼以及到達(dá)或離去的時刻。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。【選作內(nèi)容】(1)兩個棧共享空間,思考應(yīng)開辟數(shù)組的空間是多少?(2)汽車可有不同種類,則他們的占地面積不同,收費標(biāo)準(zhǔn)也不同,如1輛客車和1.5輛小汽車的占地面積相同,1輛十輪卡車占地面積相當(dāng)于3輛小汽車的占地面積。(3)汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾。二、問題分析該問題需要以棧和隊列作為基本的存儲結(jié)構(gòu),以順序棧模擬停車場,以鏈隊列模擬車場外的便道。汽車進(jìn)入停車場,即是在順序棧上執(zhí)行進(jìn)棧操作,退出停車場即是在順序棧上執(zhí)行出棧操作;汽車進(jìn)入便道,即是在鏈隊列上執(zhí)行入隊操作,退出便道即是在鏈隊列上執(zhí)行出隊操作。當(dāng)停車場內(nèi)某輛車要離開時,在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場。設(shè)要刪除的元素在順序表St中位置為i,則從i到top之間的全部元素進(jìn)入到一個臨時棧St1中,其次再刪除該元素,然后將臨棧St1的元素按照?先進(jìn)后出?的原則重新回到St中。若鏈隊不空,則使隊頭進(jìn)棧St,并以當(dāng)前時刻開始計費。程序需要構(gòu)造兩個順序棧St和St1,其中St用于模擬停車場,St1用作臨時棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車。此外還需要構(gòu)3重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院造一個鏈隊列Qu用于模擬便道。三、數(shù)據(jù)結(jié)構(gòu)描述/*定義順序棧類型*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;四、算法設(shè)計1.對于子函數(shù)模塊,則調(diào)用順序棧的基本操作和鏈隊列的基本操作。如下:/*順序棧的基本運算算法*/voidInitStack(SqStack*&s)intStackEmpty(SqStack*s)intStackFull(SqStack*s)/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2)4重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2)voidDispStack(SqStack*s)/*以下為鏈隊列的基本運算算法*/voidInitQueue(LiQueue*&q)intQueueLength(LiQueue*q)intQueueEmpty(LiQueue*q)voidenQueue(LiQueue*&q,inte)}intdeQueue(LiQueue*&q,int&e)voidDisplayQueue(LiQueue*q)2.主程序模塊voidmain(){初始化;do{接受命令;處理命令;}while(命令!=?退出?);}五、程序優(yōu)缺點分析及優(yōu)化1.程序的優(yōu)點在程序中設(shè)置了kind變量,用于保存車的類別,便于計算不同類別車的停車費用,如下程序段:printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");scanf("%d",&kind);其中kind可取值1,2,3;若kind取2,則表示一輛客車單位時間內(nèi)的停車費用5重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院是一輛小汽車的2倍,若kind取3,則表示一輛卡車單位時間內(nèi)的停車費用是一輛小汽車的3倍。當(dāng)然printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");中的1.2.3也可以根據(jù)實際情況改變。比如,若實際中,一輛小汽車單位時間內(nèi)的停車費用是一輛客車的2倍,一輛卡車單位時間內(nèi)的停車費用是一輛客車的4倍,則可以改成:printf("\n請輸入車的類別【車的類別:1.代表客車2.代表小汽車4.代表卡車】:\n");則kind可取值1,2,4;kind取1時對應(yīng)的是客車,表示計算停車費用時以一輛客車單位時間內(nèi)的停車費用為基數(shù),若kind取2,則表示一輛小汽車單位時間內(nèi)的停車費用是一輛客車的2倍,若kind取4,則表示一輛卡車單位時間內(nèi)的停車費用是一輛客車的4倍。2.程序的缺點(1)輸入時間時,程序沒有檢測錯誤功能程序的輸入形式如下:設(shè)n=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,40),(‘E’,0,0)。其中:‘A’表示到達(dá)(arrival);‘D’表示離去(departure);‘E’表示輸出結(jié)束(end)。設(shè)每個輸入項的形式為(Choose,CarNumber,Time),其中Choose表示每個括號中的第一項數(shù)據(jù),即A/D/E;CarNumber表示每個括號中的第二項,即1/2/3;Time表示每個括號中的第三項,即5/10/15。設(shè)前后兩次輸入的數(shù)據(jù)中的第三項分別為Time1,Time2;則必須滿足Time2≧Time1。而在實際輸入過程中用戶可能會忽略這一點,所以應(yīng)該在輸入Time是設(shè)置一個判斷語句,若前后兩次輸入的Time不滿足Time2≧Time1,則要求用戶重新輸入,直至滿足要求為止。(2)程序的界面不夠清晰,一次性輸入的數(shù)據(jù)項比較多,容易出錯。3.改進(jìn)思想(1)為了保證前后兩次輸入的Time必須滿足Time2≧Time1,使程序具有錯誤檢測功能,在程序輸入部分添加了如下代碼:printf("輸入現(xiàn)在的時刻:\n");scanf("%d",&time2);while(time2<time1){printf("時間輸入錯誤,請重新輸入:\n");scanf("%d",&time2);6重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院}time1=time2;//time1定義為靜態(tài)變量(2)為了使程序有更清晰的界面,可在主函數(shù)中加入菜單的顯示方式。且數(shù)據(jù)可以采用一次輸入一個數(shù)據(jù)項,分步輸入的方式,使輸入過程少出錯。于是可以將主函數(shù)進(jìn)行修改。(見附錄一)六、程序源代碼#include<stdio.h>#include<malloc.h>#defineN2/*停車場內(nèi)最多的停車數(shù)*/#definePrice2/*每單位停車費用*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;/*順序棧的基本運算算法*/voidInitStack(SqStack*&s){s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;7重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院}intStackEmpty(SqStack*s){return(s->top==-1);}intStackFull(SqStack*s){return(s->top==N-1);}/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2){if(s->top==N-1)return0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return1;}/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2){if(s->top==-1)return0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return1;}voidDispStack(SqStack*s){inti;for(i=0;i<=s->top;i++)printf("%d",s->CarNo[i]);printf("\n");}/*以下為鏈隊列的基本運算算法*/8重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院voidInitQueue(LiQueue*&q){q=(LiQueue*)malloc(sizeof(LiQueue));q->front=q->rear=NULL;}intQueueLength(LiQueue*q){intn=0;QNode*p=q->front;while(p!=NULL){n++;p=p->next;}return(n);}intQueueEmpty(LiQueue*q){if(q->rear==NULL)return1;elsereturn0;}voidenQueue(LiQueue*&q,inte){QNode*s;s=(QNode*)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若鏈隊為空,則新結(jié)點是隊首結(jié)點又是隊尾結(jié)點*/q->front=q->rear=s;else{q->rear->next=s;/*將*s結(jié)點鏈到隊尾,rear指向它*/q->rear=s;}}intdeQueue(LiQueue*&q,int&e){QNode*t;if(q->rear==NULL)/*隊列為空*/return0;9重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院if(q->front==q->rear)/*隊列中只有一個結(jié)點時*/{t=q->front;q->front=q->rear=NULL;}else/*隊列中有多個結(jié)點時*/{t=q->front;q->front=q->front->next;}e=t->CarNo;free(t);return1;}voidDisplayQueue(LiQueue*q){QNode*p=q->front;while(p!=NULL){printf("%d",p->CarNo);p=p->next;}}voidmain(){charchoose;/*用于選擇命令*/intno,e1,time,e2,kind;/*用于存放車牌號、當(dāng)前停車時刻*/inti,j;SqStack*St,*St1;/*臨時棧St1,當(dāng)停車場中間的車要推出去時,用于倒車*/LiQueue*Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf("##############################################################################");printf("\n##");printf("\n#歡迎使用停車場管理系統(tǒng)#");10重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n##");printf("\n#【輸入提示】:汽車狀態(tài)由A、D、E表示。其中,A:表示汽車到達(dá)D:表示汽車離去,#");printf("\n#E:表示輸出結(jié)束。每次輸入的數(shù)據(jù)由三項構(gòu)成,即:(汽車狀態(tài),車牌號,當(dāng)前時刻)#");printf("\n#數(shù)據(jù)項之間以逗號分開。例如輸入示范:A,1,5#");printf("\n##############################################################################\n");printf("\n正在讀取汽車信息...\n");do{printf("\n*****************************************************************");printf("\n請分別輸入汽車狀態(tài)(A/D/E)、車牌號和當(dāng)前時刻(數(shù)據(jù)之間以逗號分開):\n");scanf("%c,%d,%d",&choose,&no,&time);switch(choose){/***************************汽車到達(dá)******************************/case'A':case'a':if(!StackFull(St))/*停車場不滿*/{Push(St,no,time);printf("該車在停車場中的位置是:%d\n",St->top+1);}else/*停車場滿*/{enQueue(Qu,no);printf("\n停車場已滿,該車進(jìn)入便道,在便道中的位置是:%d\n",QueueLength(Qu));}break;/*************************汽車離開********************************/case'D':case'd':11重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n請輸入車的類別【車的類別:1.代表小汽車2.代表客車3.代表卡車】:\n");scanf("%d",&kind);for(i=0;i<=St->top&&St->CarNo[i]!=no;i++);if(i>St->top)/*要離開的汽車在便道上*/{/*汽車可以直接從便道上開走,此時排在它前面的汽車要先開走讓路,然后再依次排到隊尾*/while(Qu->front->CarNo!=no){enQueue(Qu,Qu->front->CarNo);//deQueue(Qu,Qu->front->CarNo);Qu->front=Qu->front->next;}deQueue(Qu,no);printf("\n便道上車牌號為%d的汽車已離開!\n",no);printf("\n當(dāng)前便道中的車輛的車牌號分別是:");DisplayQueue(Qu);printf("\n");}else/*要離開的汽車在停車場中*/{for(j=i;j<=St->top;j++){Pop(St,e1,e2);/*e1,e2用來返回被刪元素的車牌號和停車時刻*/Push(St1,e1,e2);/*倒車到臨時棧St1中,將e1,e2插入到臨時棧中*/}Pop(St,e1,e2);/*該汽車離開*/printf("\n車牌號為%d的汽車停車時間為:%d。停車費用為:%d\n",no,time-e2,(time-e2)*Price*kind);/*對小汽車而言:當(dāng)前時刻減去該車當(dāng)時停車的時刻,再乘以價格就是費用,而對于客車和卡車而言,就要乘以kind倍小汽車的價格*/while(!StackEmpty(St1))/*將臨時棧St1重新回到St中*/{Pop(St1,e1,e2);Push(St,e1,e2);}if(!QueueEmpty(Qu))/*隊不空時,將隊頭進(jìn)棧St*/{12重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院deQueue(Qu,e1);Push(St,e1,time);/*以當(dāng)前時間開始計費*/}printf("\n當(dāng)前停車場中的車輛的車牌號分別是:");//輸出停車場中的車輛DispStack(St);}break;/************************結(jié)束*********************************/case'E':case'e':printf("\n正在退出系統(tǒng)...\n");if(!StackEmpty(St))//顯示停車場情況{printf("\n當(dāng)前停車場中的車輛的車牌號分別是:");//輸出停車場中的車輛DispStack(St);printf("\n");}elseprintf("\n當(dāng)前停車場中無車輛\n\n");break;/************************結(jié)束*********************************/default:/*其他情況*/printf("輸入的命令錯誤!\n");break;}}while(choose!='E'&&choose!='e');}七、程序運行結(jié)果取N=2,即停車場內(nèi)最多的停車數(shù)為2取Price=2,即每單位停車費用為2輸入數(shù)據(jù)為:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),13重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。程序演示結(jié)果如下圖所示:14重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院八、心得體會(1)該實驗涉及到順序棧的建立、插入、刪除等操作,涉及到了鏈隊列的建立、插入、刪除等操作。做這個實驗,加深了我對以上知識點的認(rèn)識和理解。(2)提高了C語言編程的能力。在程序設(shè)計過程中,需要經(jīng)過反復(fù)地編寫,調(diào)試,運行,發(fā)現(xiàn)問題并解決問題,在這次實驗的設(shè)計中,我加深對程序的了解,提高自己的實際動手能力和獨立思考的能力同時我也學(xué)會了綜合以前學(xué)到的基本知識來解決較大問題的方法。(3)一方面我養(yǎng)成了注重程序細(xì)節(jié)的意識。例如:printf("\n請分別輸入汽車狀態(tài)(A/D/E)、車牌號和當(dāng)前時刻(數(shù)據(jù)之間以逗號分開):\n");scanf("%c,%d,%d",&choose,&no,&time);15重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院%c,前面必須留一個空格,否則程序在顯示的時候就會有一些問題。(4)另一方面我也深刻地認(rèn)識到了《數(shù)據(jù)結(jié)構(gòu)》這門課程的重要性?!皵?shù)據(jù)結(jié)構(gòu)”在計算機科學(xué)中是一門綜合性的專業(yè)基礎(chǔ)課。數(shù)據(jù)結(jié)構(gòu)的研究不僅涉及到計算機硬件的研究,而且和計算機軟件的研究有著更密切的關(guān)系,無論是編譯程序還是操作系統(tǒng),都涉及到數(shù)據(jù)元素在存儲器中的分配問題。在研究信息檢索時也必須考慮如何組織數(shù)據(jù),以便使查找和存取數(shù)據(jù)元素更為方便??梢哉J(rèn)為數(shù)據(jù)結(jié)構(gòu)是介于數(shù)學(xué)、計算機硬件和計算機軟件三者之間的一個核心內(nèi)容,是從事計算機科學(xué)研究及其應(yīng)用的科技工作者必須掌握的重要內(nèi)容附一、優(yōu)化后的程序#include<stdio.h>#include<malloc.h>#defineN2/*停車場內(nèi)最多的停車數(shù)*/#definePrice2/*每單位停車費用*/typedefstruct{intCarNo[N];/*車牌號*/intCarTime[N];/*進(jìn)場時間*/inttop;/*棧指針*/}SqStack;/*定義順序棧類型*//*定義鏈隊類型*/typedefstructqnode{intCarNo;/*車牌號*/structqnode*next;}QNode;typedefstruct{QNode*front;/*隊首和隊尾指針*/QNode*rear;}LiQueue;/*順序棧的基本運算算法*/voidInitStack(SqStack*&s){s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;}16重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院intStackEmpty(SqStack*s){return(s->top==-1);}intStackFull(SqStack*s){return(s->top==N-1);}/*S中的插入新元素*/intPush(SqStack*&s,inte1,inte2){if(s->top==N-1)return0;s->top++;s->CarNo[s->top]=e1;s->CarTime[s->top]=e2;return1;}/*刪除S的棧頂元素,并用e1,e2返回其值*/intPop(SqStack*&s,int&e1,int&e2){if(s->top==-1)return0;e1=s->CarNo[s->top];e2=s->CarTime[s->top];s->top--;return1;}voidDispStack(SqStack*s){inti;for(i=0;i<=s->top;i++)printf("%d",s->CarNo[i]);printf("\n");}/*以下為鏈隊列的基本運算算法*/voidInitQueue(LiQueue*&q){q=(LiQueue*)malloc(sizeof(LiQueue));17重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院q->front=q->rear=NULL;}intQueueLength(LiQueue*q){intn=0;QNode*p=q->front;while(p!=NULL){n++;p=p->next;}return(n);}intQueueEmpty(LiQueue*q){if(q->rear==NULL)return1;elsereturn0;}voidenQueue(LiQueue*&q,inte){QNode*s;s=(QNode*)malloc(sizeof(QNode));s->CarNo=e;s->next=NULL;if(q->rear==NULL)/*若鏈隊為空,則新結(jié)點是隊首結(jié)點又是隊尾結(jié)點*/q->front=q->rear=s;else{q->rear->next=s;/*將*s結(jié)點鏈到隊尾,rear指向它*/q->rear=s;}}intdeQueue(LiQueue*&q,int&e){QNode*t;if(q->rear==NULL)/*隊列為空*/return0;if(q->front==q->rear)/*隊列中只有一個結(jié)點時*/{t=q->front;18重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院q->front=q->rear=NULL;}else/*隊列中有多個結(jié)點時*/{t=q->front;q->front=q->front->next;}e=t->CarNo;free(t);return1;}voidDisplayQueue(LiQueue*q){QNode*p=q->front;while(p!=NULL){printf("%d",p->CarNo);p=p->next;}printf("\n");}voidmain(){intchoose;/*用于選擇命令*/intno,e1,time2,e2,no_away;/*no_away:汽車離開時輸入車牌號;time2:當(dāng)前停車時刻;*/staticinttime1;/*靜態(tài)變量time1用于存放上次時刻*/inti,j;intkind;/*車的類別*/time1=time2=0;SqStack*St,*St1;/*臨時棧St1,當(dāng)停車場中間的車要推出去時,用于倒車*/LiQueue*Qu;InitStack(St);InitStack(St1);InitQueue(Qu);printf("########################################################");printf("\n##");19重慶郵電大學(xué)計算機科學(xué)與技術(shù)學(xué)院printf("\n#歡迎使用停車場管理系統(tǒng)#");printf("\n##");printf("\n########################################################\n");do{printf("\n********************主菜單****************************\n");printf("**1:車輛到達(dá)**\n");print
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024福建福州榕發(fā)(福州)置業(yè)有限公司招聘筆試參考題庫附帶答案詳解
- 全面監(jiān)督報告范文
- 取水工程專項報告范文
- 青少年勵志公益報告范文
- 青海省扶貧調(diào)研報告范文
- 2025年度洗車服務(wù)與廣告合作承包合同
- 二零二五年度果樹種植土地托管承包與農(nóng)村旅游發(fā)展合作協(xié)議
- 二零二五年度物流企業(yè)司機安全責(zé)任執(zhí)行協(xié)議
- 2025年度蔬菜育苗與農(nóng)業(yè)產(chǎn)業(yè)扶貧合作合同
- 二零二五年度交通事故財產(chǎn)損失賠償協(xié)議
- 李德新中醫(yī)基礎(chǔ)理論講稿
- Photoshop圖像處理課件(完整版)
- 05844 全國 江蘇 自考國際商務(wù)英語課后習(xí)題答案 詳解
- CPK計算表格EXCEL模板
- 重慶道路交通事故認(rèn)定書(簡易程序)樣本
- 2022年獸醫(yī)外科手術(shù)學(xué)作業(yè)題參考答案
- T∕CAMDI 009.1-2020 無菌醫(yī)療器械初包裝潔凈度 第1部分:微粒污染試驗方法 氣體吹脫法
- 上風(fēng)高科項目管理測試v
- 高中生物規(guī)范答題(課堂PPT)
- 酒店sop管理手冊
- 10KV變電所電氣調(diào)試施工方案
評論
0/150
提交評論