数据结构课程设计报告Word格式文档下载.docx
- 文档编号:15090414
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:41
- 大小:124.88KB
数据结构课程设计报告Word格式文档下载.docx
《数据结构课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
停车场内或便道上的停车位置;
若是车辆离去,则输出汽车在停车场内停留的时间和应交纳
的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
2.【总体分析与设计】
(1)设计思想:
两个栈都以线性表实现,队列以链表结构实现,指定停车场栈的容量大小,车进入时以输入的字母是‘A’还是‘D’,‘E’判断是车辆进入还是离开。
若是‘A’,代表车辆进入,当停车场不满时,直接进入,且记录进入时间,当停车场已满时,车进入队列。
当字母是‘D’时,表示车辆离开,车出栈,同时记录出栈时间,计算收费。
原来停在便道上的车进入,并且记录正式进入停车场时间。
当字母是‘E’时,表示系统终止。
(2)设计表示:
(3)详细设计表示:
当车辆进入停车场时,若停车场未满,只是调用压栈程序,若停车场已满,调用队列入队;
当车辆离开停车场时,调用自身栈进行出栈,且调用队列出队。
3.【编码】
写的过程中就是栈与队列来回调用时顺序有问题,经常出现非法调用,而且栈的调用过程和队列的调用过程都要以车的类为参数,刚开始写时老是调用出错,后来请教同学才改好。
4.【程序及算法分析】
(1)使用说明:
在屏幕上输入如:
A424,'
A'
代表车辆进入停车场,代表车辆的车牌号,代表车辆进入停车场的时间,或D445,'
D'
代表车辆离开停车场,代表车辆的车牌号,代表车辆离开停车场的时间,或E00,'
E'
代表输入结束!
(2)程序运行结果:
(3)讨论与分析,时空复杂度:
因为停车场的栈是线性表形式,所以一般停车场的容量比较小,插入,删除时间复杂度较大,但是空间复杂度较小,队列并没有规定其大小,而且是单链表形式的队列,没有规定队列大小,所以也不考虑溢出与假溢出现象。
插入,删除时时间复杂度较小,但是空间复杂度较大。
5.【小结】
以后的栈的应用和队列的应用实际操作的参数基本上都不是单个的数据,要学会对结构体或类的操作。
多个栈的应用,栈与队列结合使用,都能更好的解决问题。
6.【附录】
(1)车的类:
classCar
{
public:
Car(longn=0,longt=0);
longnum;
longtime;
};
Car:
:
Car(longn,longt)
num=n;
time=t;
}
(2)停车场系统的实现:
template<
classT>
voidStack<
T>
Arrival(Car&
x)
if(length>
=2)
{
carr.Add(x);
numb++;
cout<
<
"
车牌号为:
x.num<
到达但在等待序列!
endl;
}
elseif(length==0)
{
car[length]=x;
length++;
numb++;
cout<
"
到达的时间为"
x.time<
正常停站!
}
else
{intk=0;
for(inti=0;
i<
length;
i++)
{
if(car[i].num==0)
{
car[i]=x;
length++;
numb++;
cout<
k=1;
}
}
if(k!
=1)
Depature(Car&
intTime;
if(car[i].num==x.num)
car[i].num=0;
Time=x.time-car[i].time;
car[i].time=0;
length--;
numb--;
cout<
离开的时间为"
正常出站!
时间差为:
Time<
应该缴纳的费用是:
5*Time="
<
5*Time<
if(length<
numb)
carr.Delete(car[i]);
car[i].time=x.time;
car[i].num<
numb--;
break;
};
(3)主函数调用:
int_tmain()
cout<
请输入车辆信息:
如:
代表车辆进入停车场,代表车辆的车牌号,代表车辆进入停车场的时间,"
<
或D445,'
代表车辆离开停车场,代表车辆的车牌号,代表车辆离开停车场的时间!
或E00,'
chara;
longm,n;
Stack<
int>
stack;
for(;
;
)
{
cin>
>
a>
m>
n;
if(a=='
)stack.Arrival(Car(m,n));
elseif(a=='
)stack.Depature(Car(m,n));
)break;
}
return0;
【实习二】排序应用
假定文本文件A1.txt中是我校所有参加南望山庄二期挑房职工的信息,请编写程序,读
出文件中的内容,再按挑房的先后次序排队后将排序号和姓名以文本方式存放到文件A2.txt
中。
排队原则:
先按职称排,同职称按分房工龄排,同工龄按年龄排。
职称编号:
校级干部0
教授、正处级1
副教授、副处级2
讲师、科级3
其他4
利用三层循环排序,最外层是按照职称从小到大排,中间层是按照工龄从大到小排,最里层是按照年龄从大到小排。
利用简单的冒泡排序实现三层循环。
每层的冒泡排序的主要思想就是每次都是前后做对比,如果较大,就向后移动,每次都是这样循环,实现每一次排序,知道排成非递减或非递加序列。
信息录入时,自定义输入流,将a1.txt中的信息录入。
且建立结构体
structTeacher
stringname;
intjob;
intjobage;
intage;
}tea[number];
然后循环排序,运用冒泡排序。
信息输出时,自定义输出流,将所得到的排序信息写入a2.txt中。
信息的录入->
冒泡排序->
信息的输出
3.【编码】
因为结构体的后三个数字都是int型,所以原来的a1.txt中的第一行本来是汉字,不能赋值,必须将其删除。
而且录入时行数也可以通过测试计算出来,获得精确的行数。
(1)程序运行结果:
翁泽婷05491
孙礼全05483
霍少磊05482
巴金05481
程斌05476
王天奇05476
赵文鹏05390
王兴龙05387
张成志05380
龚林锋05376
甘传奇05286
曾威05286
胡浩05281
杨明宇05279
张利亚05276
孙涛05275
周渝05187
徐振飞05176
魏雯05087
杨德山05081
郭妙引05081
钟南翀05076
黄愉晋04977
杨培04969
李晓峰04884
郭瑞玲04882
徐颖04877
金鹏04875
付磊04871
张银峰04869
江政波04868
吕萍 04781
尹金香04768
冯海顺04678
冯永岗04669
刘蓓蓓04668
赵永04576
曹放04566
张飞04563
赵端昌04379
郑丹04374
庞龙飞04374
董家兴04372
林楠04369
徐玉军04362
李杰04279
李博04264
罗胜元04170
王恒宇04169
夏健04160
曹阳04069
陈勋04066
唐铭04062
舒朗04060
王彦军04059
付天宇03976
陈晓翠03969
罗森文03968
龚振宇03871
徐军辉03868
郑保红03862
罗会涛03857
许程03769
周文虎03756
刘飞03755
孙海涛03658
蔡宁波03657
樊航宇03656
高成03572
杨超03553
贾盼盼03469
张闻璟03462
陈永照03458
陈亚娣03457
刘佳03359
饶宁03358
周荣贵03358
彭鸿燕03356
李国山03259
姚田万03254
王梅03165
邓大飞03159
张响荣03150
杨承志0306
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告