数据结构停车场管理 完整版 实习报告Word格式.docx
- 文档编号:7339989
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:16
- 大小:85.25KB
数据结构停车场管理 完整版 实习报告Word格式.docx
《数据结构停车场管理 完整版 实习报告Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构停车场管理 完整版 实习报告Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
栈S已存在。
操作结果:
删除S的栈顶元素,并以e返回其值。
push(&
e)
在栈S的栈顶插入新的栈顶元素e。
lengthstack(S)
返回S中的元素个数,即栈的长度。
}ADTStack;
2.设定队列的抽象数据类型定义:
ADTQueue{
D={ai|ai属于Elem,i=1,2,……,n,n>
ai-1,ai>
|ai-1,ai属于D,i=2,……,n}
initqueue(&
Q)
构造一个空队列Q.
enqueue(&
Q,e)
初始条件:
队列Q已存在。
操作结果:
插入元素e为Q的新的队尾元素。
dequeue(&
Q,&
e)
初始条件:
Q为非空队列。
删除Q的对头元素,并用e返回其值。
Lengthqueue(Q)
返回Q的元素个数,即队列的长度。
}ADTQueue
3.本程序主要包括三个模块
1.主程序模块;
intmain()
{
初始化;
do{
接受命令;
处理命令;
}while(命令!
=退出);
}
2.处理车辆到达模块;
3.处理车辆离开模块;
各模块之间的调用关系如下:
处理车辆到达模块主程序模块处理车辆离开模块
三.详细设计
设计程序如下:
#include<
iostream>
#definen2
//将停车场的容量设为2;
#definecost10
//将单位时间的停车费设为10,车道里不收费;
#defineOVERFLOW-2
#defineERROR0
//分配栈的存储空间失败;
usingnamespacestd;
typedefstructElem
{//定义元素数据结构类型
intcarnum;
inttime;
}Elem;
typedefstructQNode
{//队列
structQNode*next;
ElemQelem;
}QNode,*QueuePtr;
typedefstruct
QueuePtrfront;
//队头指针
QueuePtrrear;
//队尾指针
}LinkQueue;
voidinitqueue(LinkQueue&
{//构造一个空队列
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.front)exit(OVERFLOW);
Q.front->
next=Q.rear->
next=NULL;
voidenqueue(LinkQueue&
Q,intcarnum,inttime)
{//入队操作
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
p->
Qelem.carnum=carnum;
Qelem.time=time;
Q.rear->
next=p;
Q.rear=p;
intlengthqueue(LinkQueueQ)
inti=0;
QueuePtrp;
p=Q.front->
next;
while(p!
=Q.rear)
{
i++;
p=p->
}
i++;
returni;
voiddequeue(LinkQueue&
Q,Elem&
{//从对头离队操作,并返回其值
if(Q.front==Q.rear)
cout<
<
"
车道中没有车辆!
endl;
if(Q.front!
e=p->
Qelem;
next=p->
if(Q.rear==p)Q.rear=Q.front;
free(p);
Elem*base;
Elem*top;
intstacksize;
}Sqstack;
voidinitStack(Sqstack&
S)
{//创建一个空栈
S.base=(Elem*)malloc(n*sizeof(Elem));
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=n;
intpush(Sqstack&
S,Elem&
e)//插入新的元素
Elem*temp;
if(S.top-S.base==S.stacksize)
return1;
else
temp=S.top;
temp->
carnum=e.carnum;
temp->
time=e.time;
S.top++;
return0;
intlengthstack(SqstackS)
{//当前栈的长度
returnS.top-S.base;
intpop(Sqstack&
e){
//删除栈顶元素,并返回其值
if(S.top==S.base)returnERROR;
e=*--S.top;
voidcarin(Sqstack&
S,LinkQueue&
Q,Elemcar)
intk=0;
//输入数据正确
QueuePtrr;
temp=S.base;
while(temp!
=S.top)
/在栈中寻找是否有同一编号的车;
if(temp->
carnum==car.carnum)
{
cout<
该车号在停车场中已存在,请重新输入!
k=1;
//找到了有同一编号的车
break;
}
temp++;
if(k==0&
&
Q.front!
{//在栈中未找到,从队列中查找
r=Q.front->
//队头
while(r&
r->
Qelem.carnum!
=car.carnum)
{r=r->
if(r&
Qelem.carnum==car.carnum){cout<
该车号在车道中已存在,请重新输入!
k=1;
if(k==0)//说明经检查输入数据正确;
if(S.top-S.base!
=S.stacksize)//说明栈未满,
S.top->
carnum=car.carnum;
time=car.time;
S.top++;
请进入停车场"
lengthstack(S)<
号车位!
else
enqueue(Q,car.carnum,car.time);
请便车道"
lengthqueue(Q)<
稍等!
voidcarleave(Sqstack&
intture=0;
//在栈中没有找到与要离开的车
Eleme,em,*temp;
QueuePtrp,r;
if(ture==0)
while(temp!
=S.top)//先在栈中寻找;
if(temp->
{
inttemp_cost;
temp_cost=(car.time-temp->
time)*cost;
ture=1;
//在栈中找到
cout<
您的停车时间为"
car.time-temp->
time<
小时,请交纳费用!
temp_cost<
}
temp++;
if(ture==1)//备用栈
Sqstackspear;
initStack(spear);
while(S.top!
=temp+1)//先在栈中寻找;
pop(S,em);
push(spear,em);
pop(S,*temp);
if(spear.top!
=spear.base)
while(spear.top!
{
pop(spear,em);
push(S,em);
}
if(ture==1&
=Q.rear)//栈中有车离开,将队列中的车进入栈中
dequeue(Q,e);
//离队,并返回数据e
endl<
请便道的第一辆车"
牌号是:
e.carnum<
转入停车场,停车起始时刻是:
car.time<
!
停车位置为"
号!
if(ture==0&
=Q.rear)//栈中没找到要离开的车
p=Q.front;
//队头
while(r&
p=r;
r=r->
Qelem.carnum==car.carnum)
ture=2;
//在队列中找到要离开的车
ture=2;
便道"
Qelem.carnum<
号车离开,不收取费用!
p->
next=r->
free(r);
}//直接从队列离开
cout<
没有该辆车!
charc;
intj=0,temp_time,i=1;
//i==0,判断临时记录时间的temp_time应该去该次的值,还是上次的值。
j==0,表示第一次输入数据,不需要检测数据是否正确
LinkQueueQ;
SqstackS;
Elemcar;
initqueue(Q);
initStack(S);
请输入车辆信息(到达离开或退出标志ADE,车牌号,当前时间)"
while(cin>
>
c>
car.carnum>
car.time)
if(j==1)
if(S.top==S.base)
cout<
停车场中没有车!
else
if(car.time<
temp_time&
c!
='
E'
)
您输入的时间有误,请重新输入!
i=0;
//temp_time还是记录上次的值
else
temp_time=car.time;
i=1;
if(i==1)//正确的数据
if(c=='
A'
)//到达
carin(S,Q,car);
elseif(c=='
D'
)
if(S.top==S.base);
else
carleave(S,Q,car);
j=1;
if(j==0)//第一次输入数据不需要检测
if(c=='
carin(S,Q,car);
elseif(c=='
if(S.top==S.base)
else
temp_time=car.time;
if(c=='
输入结束!
break;
return0;
四.调试分析
1.本次作业是设计停车场的管理系统,就需要判断车牌号,及时间的输入的正确性,
输入的数据有比较严格的要求,必须符合实际。
因此对数据需要多次判断。
2.处理车辆到达模块和处理车辆离开模块其空间复杂度为O(m*n);
3.本程序循环用的很多,找车,排队,等等。
4.主程序设计的有点乱。
五用户手册
1.运行,按屏幕提示输入车辆信息;
2.回车显示车辆在停车场或停车道的信息;
3.输入E,则退出。
六.测试结果
七附录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 停车场管理 完整版 实习报告 停车场 管理 实习 报告