数据结构实习报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实习报告
数据结构课程实习报告
姓名:王倩倩学号: 20XX1002193 班号:116102-12 指导老师:陈亮、陈占龙
中国地质大学信息工程学院 20XX/2/13
实习报告内容
一、停车场管理系统
需求规格说明
【问题描述】:
设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次北向南排列,若车场内已停满n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
【基本要求】:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括
三个数据项:汽车“到达”或“离去”信息,汽车牌照号以及到达或离去的时刻。对每一组输入的数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。栈以顺序结构实现,队列以链表结构实现。
总体分析与设计
【算法设计】
一、设计思想:用栈来模拟停车场,队列用来模拟便道,根据主界面输入的数据来对停
车场进行管理,创立一个结构体Car用它来存储关于汽车的所有信息,当一个车进入停车场时把车子的信息存入结构体中,然后对结构体Car进行压栈,或压入队列,并输出车子的停车信息;当车子离开时,把结构体从栈中弹出,并根据离开时间计算出停车所需的停车费用。
二、设计表示:主界面车辆到达车辆离开
便道车辆查询停车费用查询退出系统
Stack Add Arrival Add IsFull Delete Leave Queue IsEmpty Delete 程序结构分析:
因为停车场中,每辆车子都是按顺序停入的,要有先后顺序,且只有一个进出口,后进
先出,所以要用栈模拟的停车场,创建一个结构体存入
车辆信息,车子进入停车场时用Stack的Add函数把已存入车辆信息的结构体对象进行压栈,当停车场停满即栈满时,用Queue的Add函数把车子停入另外一个便道,让车子在便道等候,等栈内有空位时,再将车停入停车场;当车辆离开时先用Leave函数判断,车子是否在停车场中,若在Leave 函数调用Stack的Delete函数,若不在输出“您要查找的车不在!”。
编程遇到的问题计算法改进:
1、关于车辆信息的保存:因为车辆信息需要保存不止一项,所以需要建立一个可以保存信息的东西,刚开始我用的是类,信息虽然存进去了可是类却不会压栈,最后放弃,创建一个结构体Car,它功能和类差不多并且应用比较简单。
2、车辆离开时的判断:当车辆离开时,首先要判断车子是否在停车站内,当栈不为空时,从栈顶开始一个个判断输入的车牌号是否在栈内,这时就用到了Top函数判等若不等寻找下一个,若相等把它弹出栈。
编码
定义结构体Car: struct Car {
int carnumber; int hour; int min; };
车辆到达时的Arrival函数:
int Arrival {
Car Ca;
cout>;
cout>; cin>>;
cout park(2); // Stack tem(2);
int Carnumber; int H,M;
cout>Carnumber; Car C; char m;
if(! ) {
while( .carnumber!=Carnumber) {
(C); j--;
(C); m++;
if( )
{cout>H>>M;
cout>inhour>>inmin;
cout>ouhour>>oumin; cout>a; {
switch(a) {
case 'A': Arrival ;break; case 'D':Leave ;break; case 'B':break;
case 'F':cout>inhour>>inmin;
cout>ouhour>>oumin; cout tea[j+1].zhicheng ) {swap(tea[j],tea[j+1]);}else if(tea[j].zhicheng==tea[j+1].zhicheng ) { if(tea[j].worktime >Name>>Zhicheng>>Worktime>> Age; strcpy(tea[m].name,Name);
tea[m].zhicheng=Zhicheng;
tea[m].worktime=Worktime; tea[m].age=Age; } // teacher a[505]; // int n; for(int i=n;i>1;i--) Bubble(tea,550); for (int i=0;iNext=new TeleNumber; End=Head->Next;
(\打开外存文件,看是否有数据存在
while(! ) //如果有,则打开,并将数据读取到程序 {
End->ReadFile(infile);
if(End->name[0]=='\\0')break;End->Next=new TeleNumber; End=End->Next; }
// ; }
文件保存:
void Tele::Save //保存文件 {
(\建立外存文件for(TeleNumber *p=Head->Next;p!=End;p=p->Next)
outfile>x; {
switch(x) {
case 'A': ;break; case 'B': ;break; case 'C': ;break;
case 'D':cout>name;
(name);break; case 'E': ;break;