当前位置:文档之家› 数据结构实验停车场问题

数据结构实验停车场问题

《数据结构》课程实验
实验报告
题目: 停车场管理
专业: 计算机科学与几技术
班级:
姓名:
学号:
完成日期:
一、试验内容
设停车场就是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已经停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出场为它让路,待该辆车开出大门外,其她车辆再按次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,试为停车场编制按上述要求进行管理的模拟程序。

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。

对一组输入数据进行操作后的输出信息为:若就是车辆到达,则输出汽车在停车场内或便道上的停车位置;若就是车辆离去,则输出汽车在停车场内停留的时间与应交纳的费用(在便道上停留的时间不收费)。

二、试验目的
(1)深入了解栈与队列的特性,掌握栈与队列的存储方法。

(2)掌握栈与队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。

三、流程图
四、源程序代码#include<stdio、h> #include<stdafx、h> void main()
{
struct cc1
{
int hm1,sk1;
}a[5];//停车场
struct bd
{
int hm2,sk2;
}b[5];//便道
struct cc2
{
int hm3,sk3;
}c[4];//存放从停车场内退出的车
int p=0,q=0,x=0,n,y,t,r,i,j,g,h,z;
char m;
printf("输入停车场容量与每分钟收费\n");
scanf("%d%d",&n,&y);
printf("输入数据:\n");
for(;;)
{
scanf("%c",&m);
//判断输入数据
if(m=='e'||m=='E')
break;
scanf("%d%d",&t,&r);//t表示车牌号,r表示时间
//车到达
if(m=='a'||m=='A')
{
if(p<n)
{//n表示停车场容量,p表示场内车的数量
a[p]、hm1=t;
a[p]、sk1=r;
printf("车停在停车厂内%d号位置、\n",p+1);
p++;
}
//车停在便道内
else
{
b[q]、hm2=t;
b[q]、sk2=r;
printf("车停在便道上%d号位置、\n",q+1);
q++;
}
}
//车离开
if(m=='d'||m=='D')
{h=p;
for(i=0;i<p;i++,g=i)
if(a[i]、hm1==t)
{//判断车就是否停在场内
p--;
if(i==p)//如果车停在场内最后一位
printf("%d号车在停车厂内停留了%d分钟,应交纳%d元钱、\n",t,r-a[i]、sk1,y*(r-a[i]、sk1));
else
{//在它之后进入的车辆先退出场为它让路
for(j=p;j>i;j--)
{
c[x]、hm3=a[j]、hm1;
c[x]、sk3=a[j]、sk1;
x++;
}
printf("%d号车在停车厂内停留了%d分钟,应交纳%d元钱、\n",t,r-a[i]、sk1,y*(r-a[i]、sk1));
for(j=i;x-1>=0;x--,j++)
{//退出的车再进入停车场内
a[j]、hm1=c[x-1]、hm3;
a[j]、sk1=c[x-1]、sk3;
}
}
if(q!=0)
{//便道内的车进入停车场
a[p]、hm1=b[0]、hm2;
a[p]、sk1=r;
p++;
for(j=0;j<q-1;j++)
{
b[j]、hm2=b[j+1]、hm2;
b[j]、sk2=b[j+1]、sk2;
}
q--;
}
break;
}
//判断车就是否停在便道上
for(i=0;i<q;i++,z=q)
if(b[i]、hm2==t)
{
printf("该车停留在便道内,不收费、\n");
for(j=i;j<q-1;j++)
{
b[j]、hm2=b[j+1]、hm2;
b[j]、sk2=b[j+1]、sk2;
}
q--;
break;
}
if(g==h&&i==z) printf("无该车、\n");
}
}
}
五、调试过程
调试过程中,车离开的那一部分经常出现错误,运行结果与预想的不太一样,后来发现就是停车场的计数器那出现了问题,使离开后再进入停车场的位置发生了错误。

如果输入的离开时间比到达的时间小,则会出现付费为负值。

六、结果分析。

相关主题