停车场管理问题实验报告文档格式.docx
- 文档编号:15290794
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:17
- 大小:981.45KB
停车场管理问题实验报告文档格式.docx
《停车场管理问题实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《停车场管理问题实验报告文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
例如,(‘A’,,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
本题可用栈和队列来实现。
四、需求分析
停车场采用栈式结构,停车场外的便道采用队列结构(即便道就是等候队列)。
停车场的管理流程如下
①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);
如果停车场已满,则车辆进入等候队列(车辆进入便道等候)。
②当车辆要求出栈时,该车到栈顶的那些车辆先弹出栈(在它之后进入的车辆必须先退出车场为它让路),再让该车出栈,其他车辆再按原次序进栈(进入车场)。
当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队列头取出一辆车压入栈中。
五、流程图
六、详细设计
1.本程序主要包含四个模块
1)主程序模块
intmain(){
Initialization();
CarNodecar;
SqStackPark,TempPark;
LinkQueueQ;
InitStack(Park);
InitStack(TempPark);
InitQueue(Q);
while((scanf("
%c%d%d"
&
car.event,&
car.num,&
car.time))&
&
(car.event!
='
e'
car.event!
E'
))
{
getchar();
//除去输入结束时的回车
switch(car.event)
case'
A'
:
a'
Arrive(Park,Q,car);
break;
D'
d'
Leave(Park,TempPark,Q,car);
default:
printf("
您的第一个数据输入有误!
\n"
);
}
程序结束,谢谢使用!
return0;
2)分别构造空栈和空队列
栈:
StatusInitStack(SqStack&
S){
//构造一个空栈
S.Stacksize=0;
S.base=(CarNode*)malloc((MAX)*sizeof(CarNode));
if(!
S.base){
exit(OVERFLOW);
存储空间分配失败"
S.top=S.base;
returnOK;
}
队列:
StatusInitQueue(LinkQueue&
Q){
//构造一个空队列(带头结点)
Q.front=Q.rear=(QueueNode*)malloc(sizeof(QueueNode));
Q.front){
Q.front->
next=NULL;
Q.queuesize=0;
3)车辆到达处理
StatusArrive(SqStack&
S,LinkQueue&
Q,CarNode&
e){
//车辆到达处理
if((S.top-1)->
time<
=e.time){
//时间处理
Check_Stack(S,e)&
!
Check_Queue(Q,e)){
//是否已存在
if(S.top-S.base<
MAX){
Push(S,e);
成功进入停车场,在%d号车库!
S.top-S.base);
else{
EnQueue(Q,e);
停车场已满,车辆进入便道,在%d号车位!
Q.queuesize);
else
该牌照的车已存在,输入有误,请重新输入\n"
时间输入有误,请重新输入!
returnFALSE;
4)车辆离开处理
StatusLeave(SqStack&
S,SqStack&
TempS,LinkQueue&
e)
{
//车辆离开处理
CarNodea;
intleatime,leanum;
intentertime;
//进入停车场时间
intcost;
(Check_Stack(S,e)||Check_Queue(Q,e)))
数据输入错误,本停车场内无所查询车辆,请重新输入!
returntrue;
if(Check_Stack(S,e))
//若需要离开的车辆在停车场
if(e.num==(S.top-1)->
num)
//车辆处在栈顶
Pop(S,a);
leatime=e.time;
leanum=e.num;
entertime=a.time;
车辆进入车库时间:
%d\t现在(离开)时间:
%d\t停留时间:
%d\t\n"
entertime,leatime,leatime-entertime);
else
//车辆处在栈中间
do{
Pop(S,a);
//从栈中依次退出
Push(TempS,a);
//依次进入临时栈
}while((S.top-1)->
num!
=e.num);
//直到top指针下一个位置的num=车牌号
//该车离开
车进入停车场时间:
do{
//其余车辆按原来次序返回停车场
Pop(TempS,a);
Push(S,a);
}while(TempS.top!
=TempS.base);
//条件与上面不同,此时是全部回去
cost=(leatime-entertime)*price;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 问题 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)