前言 1
工程概况 1
正文 13.1设计内容 1
3.2 设计要求 2
3.3 设计思想 2
3.4主要模块 2
3.4.1 程序结构 3
3.5系统数据结构设计 3
3.5.1 堆栈 3
3.5.2 队列 3
3.6统算法设计和流程 4
3.6.1系统算法设计 4
3.6.2系统流程图 6
3.7系统测试 6
参考文献 8
小结 9在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。并且选择一个好的数据结构类型,对于数据处理的能力及性能提高方面都是很重要的。
随着现在数据处理的多样性、复杂性,数据结构的应用也随之运用的更加的广泛,运用数据结构处理问题也更加的方便快捷。
通道上车辆的停放则用一个队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此队列上的结点。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现。
2.1 项目所用的时间。
从这个项目开始到结束总共历时十天。完成于2024年12月30日。
2.2项目负责人。
陈伟,男,计算机科学与技术14-1,学生。
2.3项目指导人。
吴刚,男,信息工程学院教师,讲师。
设计一个停车场,停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要将对列内元素弹到堆栈中就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车。
首先定义用来模拟停车场的堆栈以及用来模拟通道的队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用menu()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界。
面,在用户的选择过程中,程序又分别调用车辆的进入、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从调用的这四个函数中回到主函数结束整个程序的运行。
图2.1模块调用结构图。
本停车场管理系统是利用堆栈和队列来进行实现的,分别利用堆栈和队列的基本操作。
利用堆栈的性质就可以模拟出停车场的内部车道,车辆必须满足先进后出的规律,里面的车辆出入必须先移出后进的车辆。
堆栈的基本操作如下:
creatstack() 建立堆栈。
pushstack (stack* stack, void* datainptr) 压入元素进栈。
popstack (stack* stack, void* datainptr) 弹出栈内元素。
fullstack (stack* stack判断栈满。
emptystack (stack* stack判断栈空。
destorystack (stack* stack销毁堆栈。
利用队列的性质可以模拟出停车场外部的便道,当停车场内部的车满后将车辆停在便道上。便道着满足队列的性质先进先出,当内部有空位就将便道上第一辆车停如。
队列的基本操作如下:
createqueue建立队列。
enqueue (queue* queue, void* itemptr元素进对。
dequeue (queue* queue元素出队。
fullqueue (queue* queue判断队满。
emptyqueue (queue* queue判断队空。
destroyqueue(queue* queue销毁队列。
分别利用一个堆栈和一个队列来模拟停车厂内部车道和外部便道,当有车停入时则将车的信息压入栈中,当内部车道满了后则将车先停到便道中等候车位。当车辆要出去时则利用一个临时的堆栈来进行数据的缓存,先将车的信息压入临时堆栈,当目标车出栈后则将临时栈内的元素转入停车场栈中,并将便道的上的车的第一辆转入内部车道。通过堆栈、队列对信息的查询也只需要对结构内元素一一遍历即可,这样就可以实现对停车场信息的处理。
系统主要2个部分:停车取车都是对堆栈和队列的操作。汽车进入时则压入堆栈或队列中,离开时则弹出。
定义汽车的属性结构体,并用结构体来描述和存储汽车的信息。
typedef struct{
int number; 车牌号。
int time; 进入时间。
char size; 汽车型号。
car;汽车的入库时对堆栈和队列的压入操作,将汽车信息结构体链到堆栈队列中。
car* car定义一汽车的信息。
pushstack(stack,car); 压栈及进入车库中。
enqueue(queue, car); 进对及停放在便道上。
汽车离开时将堆栈或队列中的目标汽车信息删掉并对信息处理分析打印出要的信息。
车库中车的离开处理:
carout=(car*)popstack(stack)
pushstack(changestack,carout将汽车信息转入临时栈中保存。
pushstack(stack,changecar处理后汽车信息从新存入车库栈中便道上车辆的离开:
changecar=(car*)dequeue(queue)
enqueue(changequeue,changecar将汽车信息转入临时队中保存。
enqueue(queue,changecar处理后汽车信息从新存入便道队中。
通过内部车库栈和便到队列来存储汽车信息,然后通过其得基本操作来得到汽车的进入和离开,并得到预期的结果。
图3.5 程序流程图。
进入系统,先调用void beginsystem(stack*stack,queue*queue)函数进行初始化堆栈和队列,读取已保存的信息。然后调用menu()函数调出导航菜单提供功能导航,如图4.1
图4.1通过导航菜单分别对不同的功能进行实现,而调用相关的函数。车辆进入时则调用停车函数void car_park(stack*stack,queue* queue),可以将车辆信息显示并将车入库。
图4.2同样的车库信息、汽车离开、退出系统也通过调用各自的函数来实现的,分别为void park_imformation(stack* stack,queue*queue)
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...