《数据结构》实验报告.docx
《《数据结构》实验报告.docx》由会员分享,可在线阅读,更多相关《《数据结构》实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
《数据结构》实验报告
《数据结构》课程设计报告
系别:
管理信息系
班级:
B070503班
学号:
B07050310
姓名:
田坤
实训日期2009.06.29—2009.07.03
《数据结构课程设计》实验报告
开课实验室:
K机房2009年6月29日
班级
B070503
学号
B07050310
姓名
田坤
成绩
课程
名称
数据结构
实验项目
名称
停车场管理
指导教师
赵亚军
教师评语
教师签名:
年月日
一、实验目的
1、通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固。
2、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、功能要求
设计一个停车场管理系统,模拟停车场的运作,通过此程序具备以下功能:
1、要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的数据序列进行模拟管理
2、要求处理的数据元素包括三个数据项:
汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时间
3、该系统完成以下功能:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是离去,则输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)
4、要求栈以顺序结构实现,队列以链表实现
三、设计要求
1、独立完成全部代码的设计、编写、调试与部署,运行正确无误
2、编写设计报告书
设计报告书应包括:
(1)问题描述和系统要求
(2)系统主要功能模块设计
(3)设计中遇到的问题及其解决方法
(4)系统运行报告
(5)总结
1问题描述:
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。
每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
2基本要求:
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
3实现提示:
汽车的模拟输入信息格式可以是:
(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
本题可用栈和队列来实现。
四、运行环境
1.TurboC
2.Windows操作系统
五、实验步骤
(绘制相应的流程图)
六、实验过程原始代码
#include"stdio.h"
#defineN5/*定义停车场长度*/
#defineM10
typedefstruct/*定义栈元素的类型*/
{
intnum;
jintarrtime;
}elemtype;
typedefstruct/*定义栈*/
{elemtypestack[N];
inttop;
}stack;
typedefstructnode/*定义队列节点类型*/
{intnum;
structnode*next;
}queneptr;
typedefstruct/*定义队列*/
{queneptr*front,*rear;
}quene;
voidinitstck(stack*s)/*初始化栈*/
{s->top=-1;
}
intpush(stack*s,eletypex)/*数据元素X进入指针S所指的栈*/
{if(s->top=N-1)
return(0);
}
}
elemtypepop(stack*s)
{
elemtypex;
if(s->top<0)
{x.num=0;
x.arrtime=0;
return(x);
}
else{x=s->stack[s->top];
s->top--;
returnx;/*如果栈不空,返回栈顶元素*/
}
}
voidinitquene(quene*s)/*初始化队列*/
{s->front=(queneptr*)malloc(sizeof(queneptr));
/*产生一个新结点,作为头结点*/
s->rear=s->front;
s->front->next=NULL;
s->front->num=0;/*头结点的NUM保存队列元素的个数*/
}
voidenquene(quene*s,intnum)/*数据入队列*/
{queneptr*p;
p=(queneptr*)malloc(sizeof(queneptr));
p->num=num;
p->next=NULL;
s->rear->next=p;
s->rear=p;
s->front->num++;
}
intdelquene(quene*s)
{queneptr*p;
intn;
if(s->front==s->rear)
return(0);/*如果对列空*/
else{p=s->front->next;
s->front->next=p->next;
if(p->next==NULL)
s->rear=s->front;
n=p->num;
free(p);
s->front->num--;
return(n);
}
}
voidarrive(stack*s1,quene*p,elemtypex)
{
intf;
f=push(s1,x);/*新到达的车辆入停车栈*/
if(f==0)
{
enquene(p,x.num);/*如果停车场满,就进入队列*/
printf("the%dcarstopsthe%dseatofthequene\n",x.num,p->front->num);
}
elseprintf("the%dcarstopsthe%dseatofthestack\n",x.num,s1->top+1);
}
voidleave(stack*s1,stack*s2,quene*p,elemtypex)/*处理车辆离去函数*/
{
intn,f=0;
elemtypey;
queneptr*q;
while((s1->top>-1)&&(!
f))
{
y=pop(s1);
if(y.num!
=x.num)
n=push(s2,y);
elsef=1;
}
if(y.num==x.num)/*如果栈顶元素不是要离开的车辆,就将其放入车辆避所*/
{
printf("themoneyofthe%dis%dyuan\n",y.num,(x.arrtime-y.arrtime)*M);
while(s2->top>-1)
{
y=pop(s2);
f=push(s1,y);
}
n=delquene(p);
if(n)/*在停车场中找到要离开的车辆*/
{
y.arrtime=x.arrtime;
f=push(s1,y);
printf("the%dcarstopsthe%dseatofthestack\n",y.num,s1->top+1);
}
}
else
{while(s2->top>-1)/*车辆规避所不空,将其全放回停车场*/
{
y=pop(s2);
f=push(s1,y);
}
q=p->front;
f=0;
while(f==0&&q->next!
=NULL)
if(q->next->num!
=x.num)
q=q->next;
else
{
q->next=q->next->next;
p->front->num--;
if(q->next==NULL)
p->rear=p->front;
printf("the%dcarleavethequene\n",x.num);
f=1;
}
if(f==0)/*在便道上没有找到要离开的车辆,输出数据错误*/
printf("error!
thestackandthequenehavenothe%dcar\n",x.num);
}
}
voidmain()/*停车场模拟管理程序*/
{
charch;
stack*s1,*s2;
quene*p;
elemtypex;
inti=1;
clrscr();
s1=(stack*)malloc(sizeof(stack));
s2=(stack*)malloc(sizeof(stack));
p=(quene*)malloc(sizeof(quene));
initstack(s1);initstack(s2);/*初始化停车规避所栈*/
initquene(p);/*初始化便道队列*/
while(i)
{
printf("whatdoyouwanttodo?
\n");
printf("input---(Add/Del/Exit):
");
scanf("%c",&ch);
switch(ch)
{
case'a':
printf("inputthenumber:
\n");
scanf("%d",&x.num);
printf("inputthetime:
\n");
scanf("%d",&x.arrtime);
arrive(s1,p,x);/*车辆到达*/
break;
case'd':
printf("inputthenumber:
\n");
scanf("%d",&x.num);
printf("inputthetime:
\n");
scanf("%d",&x.arrtime);
leave(s1,s2,p,x);/*车辆离开*/
break;
case'e':
printf("theend!
");
i=0;
break;
default:
{printf("inputerror!
---pleaseinputagain:
\n");break;}
}
ch=getchar();
七、实验结果及分析
1、欢迎界面
2、车辆到达
3、车辆离开
4、车辆信息(停车场)
5、车辆信息(便道)
八、实验体会与收获
数据结构课程设计现在已经结束了,可是我的动手操作能力练习好像还刚刚开始。
以前也注意到了理论要与实践相结合,只是平时说说而已,没有真正的去做,通过这次数据结构的实践性操作,我感觉:
学习实质性的东西要以实验为基础,只有在试验和实践中才能知道自己的真实能力。
试验课只是短短的一周时间,很多东西只是很肤浅的了解了一下,为了能够顺利的完成实验,赵老师在刚上课时就详细的讲解了实验的流程和实验的科目。
他让我们先从理论上了解了具体的操作步骤,听的时候感觉挺简单的,为了加深我们的印象,赵老师还专门为我们实际的操作了一遍。
可是当我们自己动手时,问题很多了,几乎没有一步能够顺利完成的,做的都有些磕磕绊绊。
很珍惜这次试验的几乎,所以,只要有时间,我还是经常在课后查阅资料,加深对理论知识的理解,只有真正的理解了所学的东西才能够把知识应用于实践。
这次的数据结构课程设计,使我看到了我在学习中的许多偏差,只注重理论不注重实践是学习的一大弊端。
我的学习只是一个能用笔杆子写写,不能把知识应用于实践的纸上谈兵似的学习,这也是我所担心的问题,过于重视理论的学习!
在以后的学习中我会重视对动手能力的培养。
B07050310田坤
2009年7月3日