版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)停車場(chǎng)管理系統(tǒng)報(bào)告試驗(yàn)二棧和隊(duì)列及其應(yīng)用
一、試驗(yàn)題目:
棧和隊(duì)列及其應(yīng)用——停車場(chǎng)管理
二、試驗(yàn)內(nèi)容:
設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順次,依次由北向南排列〔大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北段〕,假設(shè)停車廠內(nèi)已停滿n輛汽車,那么后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,那么排在便道上的第一輛車跡可開(kāi)入;停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車連需要先退出車廠為它讓路,待該車輛開(kāi)出大門(mén)外,其他車輛再按原次序進(jìn)入車場(chǎng),每輛停放在車場(chǎng)的車在它離開(kāi)停車時(shí)需要按它停留的時(shí)間長(zhǎng)短繳納費(fèi)用。編寫(xiě)按上述要求進(jìn)行管理的模擬程序。
可以將停車場(chǎng)定義成一個(gè)順次棧s0,便道定義成一個(gè)鏈隊(duì)列q,而停車場(chǎng)中的某輛車要離開(kāi),那么在它后面進(jìn)停車場(chǎng)的車需要讓道,讓其離開(kāi),所以需要有一個(gè)臨時(shí)的順次棧s1,存放讓道的車輛。
當(dāng)有車輛進(jìn)停車場(chǎng)時(shí),假設(shè)棧s0不滿,那么徑直進(jìn)入棧s0;假設(shè)棧s0滿,那么進(jìn)入便道〔鏈隊(duì)列q〕。假設(shè)有s0中車輛*離開(kāi)時(shí),先讓在*后面進(jìn)棧的車從s0退棧并進(jìn)入棧s1中,讓*離開(kāi)并收取停車費(fèi)〔在便道上停留的時(shí)間不收費(fèi)〕,然后再把s1中全部元素退棧并重新進(jìn)入s0棧,最末,將鏈隊(duì)列q中的隊(duì)頭元素出隊(duì)并進(jìn)棧到s0中。
三、程序源代碼:
#includestdio.h
#includetime.h
#includestdlib.h
#includestring.h
#definecar_stop_ma*2
structTime//定義時(shí)間類型結(jié)構(gòu)體
{
intyear;
intmonth;
intday;
inthour;
intminiute;
intsecond;
};
structcars//定義汽車類型結(jié)構(gòu)體包括車牌號(hào)時(shí)間
{
char*car_id;
Timecar_time;
};
structsqStack//建立汽車棧的指針
{
cars*base;
cars*top;
};
intInitStack(sqStacks)//初始化汽車
{
s.base=(cars*)malloc((car_stop_ma*)*sizeof(cars));
if(!s.base)
{
return1;
}
s.top=s.base;
return0;
}
carsGet_Stack_top(sqStacks)//得到汽車棧頂元素
{
if(s.top==s.base)
{
printf(沒(méi)有車);
e*it(1);
}
else
return*(s.top-1);
}
voidPush_car(sqStacks,carse)//汽車棧插入新的汽車
{
if(s.top-s.base=car_stop_ma*)
{
printf(停車滿\n);
}
else
{
s.top-car_id=newchar[15];
strcpy(s.top-car_id,e.car_id);
s.top-car_time=e.car_time;
s.top++;
}
}
voidPop_car(sqStacks)//汽車棧的汽車離開(kāi)
{
if(s.base==s.top)
printf(沒(méi)有車);
else
s.top--;
}
typedefstructQNode//汽車隊(duì)列結(jié)構(gòu)體
{
carsdate;
structQNode*ne*t;
}QNode,*QueuePtr;
structLinkQueue//汽車隊(duì)列指針
{
QueuePtrfront;
QueuePtrrear;
};
intInitQueue(LinkQueueQ)//汽車隊(duì)列的初始化
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
{
printf(不能初始化隊(duì)列);
e*it(1);
}
Q.front-ne*t=NULL;
return0;
}
voidEnQueue(LinkQueueQ,QNodee)//汽車隊(duì)列添加新元素
{
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
p-date.car_id=newchar[15];
strcpy(p-date.car_id,e.date.car_id);
p-date.car_time=e.date.car_time;
Q.rear-ne*t=p;
Q.rear=p;
}
intDeQueue(LinkQueueQ)//刪除汽車隊(duì)頭元素
{
if(Q.front==Q.rear)
{
printf(空車,不能刪除);
e*it(1);
}
QueuePtrp;
p=Q.front-ne*t;
if(Q.front-ne*t==Q.rear)
{
Q.rear=Q.front;
}
Q.front-ne*t=p-ne*t;
free(p);
return0;
}
carsGet_Queue_top(LinkQueueQ)//得到汽車隊(duì)頭元素
{
if(Q.front==Q.rear)
{
printf(空車);
e*it(1);
}
else
return(Q.front-ne*t-date);
}
voidGet_time(intyear,intmonth,intday,inthour,intminiute,intsecond)//產(chǎn)生時(shí)間函數(shù)
{
time_tt=time(0);
chartmp[64];
strftime(tmp,sizeof(tmp),%Y%m%d%*%A%j%z,localtime(t));
sscanf(tmp,%d%d%d%d:%d:%d,year,month,day,hour,miniute,second);
}
voidmain()
{
inti,j=0;
intsum=0;
doublemoney=5;
intChoose;
charc;
charb[10];
carse,e2;
cars*p;
e.car_id=newchar[15];
QNodeE,E2;
LinkQueueQ;
sqStacks1,s2;
InitQueue(Q);
InitStack(s1);
InitStack(s2);
printf(歡迎進(jìn)入停車場(chǎng)管理系統(tǒng)\n);
printf(按1進(jìn)入車輛\n);
printf(按2離開(kāi)車輛\n);
printf(按0退出系統(tǒng)\n);
printf(*************************************************\n);
printf(請(qǐng)輸入您的選擇);
scanf(%d,Choose);
while(Choose!=0)
{
switch(Choose)
{
case1:
printf(請(qǐng)輸入你的車牌號(hào));
i=0;
while((c=getchar())!='')
{
b[i++]=c;
}
b[i]='\0';
strcpy(e.car_id,b);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
if(sum=car_stop_ma*)
{
E.ne*t=NULL;
E.date=e;
printf(停車場(chǎng)已停滿。請(qǐng)您在便道等候。\n);
EnQueue(Q,E);
}
else
{
printf(您在%d年%d月%d日%d:%d:%d時(shí)刻進(jìn)入\n,e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);//測(cè)試結(jié)果
Push_car(s1,e);
sum++;
}
printf(***************************************************\n);
printf(輸入你的選擇);
scanf(%d,Choose);
break;
case2:
printf(請(qǐng)輸入出停車場(chǎng)的車牌號(hào));
i=0;
while((c=getchar())!='')
{
b[i++]=c;
}
b[i]='\0';
strcpy(e.car_id,b);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
p=s1.top;
j=0;
while(jsum(strcmp((p-1)-car_id,e.car_id))!=0)
{
j++;
p--;
}
if(jsum)
{
i=0;
money=((e.car_time.second-(p-1)-car_time.second)+(e.car_time.miniute-(p-1)-car_time.miniute)*60);
printf(車牌號(hào)為%s的車離開(kāi),繳納費(fèi)用%f元\n,b,money);
while(ij)
{
e2=Get_Stack_top(s1);
Pop_car(s1);
Push_car(s2,e2);i++;
}
Pop_car(s1);
i=0;
while(ij)
{
e2=Get_Stack_top(s2);
Pop_car(s2);
Push_car(s1,e2);i++;
}
sum--;//汽車總是要減削了
if(sumcar_stop_ma*(Q.front!=Q.rear))
{
E2.date=Get_Queue_top(Q);
strcpy(e.car_id,E2.date.car_id);
Get_time(e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);
DeQueue(Q);
Push_car(s1,e);
printf(您%s在%d年%d月%d日%d:%d:%d時(shí)刻進(jìn)入\n,e.car_id,e.car_time.year,e.car_time.month,e.car_time.day,e.car_time.hour,e.car_time.miniute,e.car_time.second);//測(cè)試結(jié)果
sum++;
}
}
else
printf(此輛車不存在\n);
printf(***************************************************\n);
printf(輸入你的選擇);
scanf(%d,Choose);
break;
case0:
printf(您要離開(kāi)此系統(tǒng));break;
default:
{
printf(***************************************************\n);
printf(輸入錯(cuò)誤重新輸入);
}
scanf(%d,Choose);break;
}
}
}
四、測(cè)試結(jié)果:
五、小結(jié)〔包括收獲、心得體會(huì)、存在的問(wèn)題及解決問(wèn)題的方法、建議等〕
注:內(nèi)容一律運(yùn)用宋體五號(hào)字,單倍行間距
1〕定義汽車類型的結(jié)構(gòu)體,包括汽車車牌號(hào)為char*類型,進(jìn)入停車場(chǎng)的時(shí)間類型又是時(shí)間類型的結(jié)構(gòu)體。用函數(shù)voidGet_time(intyear,intmonth,intday,inthour,intminiute,intsecond)//產(chǎn)生時(shí)間函數(shù),返回需要的時(shí)間。
2〕初始化棧時(shí),s.top=s.base;將兩者的順次寫(xiě)反了,造成建立的的失敗;
3〕定義結(jié)構(gòu)體時(shí),兩個(gè)結(jié)構(gòu)體類型的變量可以徑直賦值,假如結(jié)構(gòu)體中不包含數(shù)組類型的變量,假如結(jié)構(gòu)體中有指針也可以徑直賦值。但是假如其中一個(gè)指針發(fā)生轉(zhuǎn)變,那么另一個(gè)也要轉(zhuǎn)變
4〕用全局變量sum掌握停車場(chǎng)中車的數(shù)量。假如車進(jìn)入sum++,假如車要離開(kāi)時(shí)那么sum--;
5〕刪除隊(duì)列中的元素時(shí)
if(Q.front-ne*t==Q.rear)
{
Q.rear=Q.front;
}
Q.front-ne*t=p-ne*t;兩句話不能顛倒
6〕假如有汽車要離開(kāi)時(shí),要判斷便道是否有車,假如有,那么要進(jìn)入停車場(chǎng),并記錄進(jìn)入時(shí)間;
7〕汽車進(jìn)入停車場(chǎng)時(shí),
voidPush_car(sqStacks,carse)//汽車棧插入新的汽車
{
if(s.top-s.base=car_stop_ma*)
{
printf(停車滿\n);
}
else
{
s.top-car_id=newchar[15];
strcpy(s.top-car_id,e.car_id);
s.top-car_time=e.car_time;
s.top++;
}
}
要給汽車的車牌號(hào)記錄,開(kāi)拓空間來(lái)放字符串。
試驗(yàn)二棧和隊(duì)列及其應(yīng)用
一、試驗(yàn)題目:
棧和隊(duì)列及其應(yīng)用——停車場(chǎng)管理
二、試驗(yàn)內(nèi)容:
設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順次,依次由北向南排列〔大門(mén)在最南端,最先到達(dá)的第一輛車停放在車場(chǎng)的最北段〕,假設(shè)停車廠內(nèi)已停滿n輛汽車,那么后來(lái)的汽車只能在門(mén)外的便道上等候,一旦有車開(kāi)走,那么排在便道上的第一輛車跡可開(kāi)入;停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024批次環(huán)保型包裝產(chǎn)品購(gòu)銷協(xié)議總覽
- 2024年連鎖餐館加盟經(jīng)營(yíng)合同版
- 2024年度運(yùn)動(dòng)場(chǎng)地租賃合同(含賽事門(mén)票銷售)3篇
- 2025版酒店客房承包經(jīng)營(yíng)與品牌授權(quán)協(xié)議3篇
- 2024年突發(fā)事件應(yīng)急預(yù)案制定合同
- 2025年度KTV員工薪酬福利體系設(shè)計(jì)合同3篇
- 2025年度三人共同投資的教育培訓(xùn)合作協(xié)議3篇
- 2024年金融機(jī)構(gòu)首席風(fēng)險(xiǎn)官聘用及風(fēng)險(xiǎn)管理合同3篇
- 2024年股權(quán)轉(zhuǎn)讓合同:具體條款
- 2024年財(cái)務(wù)困境解決合同3篇
- 石油形成過(guò)程科普知識(shí)講座
- 輔警心理健康知識(shí)講座
- 《棗樹(shù)常見(jiàn)病蟲(chóng)害》課件
- 刑法試題庫(kù)大全
- 燃?xì)獍惭b人員管理制度
- 省份簡(jiǎn)稱課件
- 公民科學(xué)素質(zhì)調(diào)查問(wèn)卷
- 小學(xué)健康教育試題-及答案
- 鋼構(gòu)件應(yīng)力超聲檢測(cè)技術(shù)規(guī)程
- -《多軸數(shù)控加工及工藝》(第二版)教案
- 體 育 課 教 學(xué) 評(píng) 價(jià) 量 表
評(píng)論
0/150
提交評(píng)論