- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2栈和队列的应用
2.1模拟停车厂管理
问题描述
设停车厂是一个可停放 n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停 车场内按车辆到达的先后顺序依次排列, 若停车场内已停满汽车, 则后来的汽车只能在门外
的便道上等候,一旦停车场内有车开走, 则排在便道上的第一辆车即可进入; 当停车场内某
辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路, 待该辆车开出大门后,为它让路的车辆再按原次序进入车场。 每辆停放在停车场的车,在离
开时按其在停车场停留时间的长短交费。 在这里假设汽车不能从便道上开走。 试设计一个实
现停车场管理的程序。
基本要求
按照从终端输入数据序列进行模拟管理。
栈用顺序结构实现,队列用链式结构实现;
每一组输入数据包括三个数据项:汽车“到达”或“离去”的信息、汽车牌照号码、 汽车到达或离去的时刻;
对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场
内或便道上的停车位置; 若是车辆离去,则输出车辆在停车场内停留的时间和应缴纳的费用
(假设在便道上等候的时间不收费)。
提示与分析
根据问题描述可知,使用栈来模拟停车场,使用队列来模拟车场外的便道;还需另
设一个辅助栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车; 输入数据时必须
保证按到达或离去的时间有序。
主要数据结构:
为了便于区分每辆汽车并了解每辆车当前所处的位置等信息,需要记录汽车的牌照 号码、进入停车场的时刻及汽车的当前状态,汽车的类型定义描述如下:
typedef struct
{char licen se_plate; /*汽车牌照号码,定义为一个字符指针类型 */
float time; /*汽车进入停车场的时刻 */
char state; /*汽车当前状态,字符 p表示停放在停车位上,字符 q表示停放在便道上*/
}Car ;
由于车位是一个狭长的通道,不允许两辆车同时出入停车位, 当有车到来时要进入
停车位的时候也要顺次停放, 当某辆车要离开时, 比它后到的车要先暂时离开停车位, 而且
越后到的车就越先离开停车位, 显然这与栈的“后进先出”特点相吻合,因此用栈来描述停
车场是合适的。由于停车位只能停放有限辆车, 而且为了便于停车厂的管理, 为每个车位要 分配一个固定的编号,不妨设为 1、2、3、4、5、…(可利用数组的下标),分别表示停车 位的1车位、2车位、3车位、4车位、5车位、…。
综上所述,使用一个顺序栈表示停车场比较方便,具体定义如下:
#define MAX_PARK 5
typedef struct
{Car Pack[MAX_PARK]; /*各汽车信息的存储空间*/
int top; /*用来指示栈顶位置的指针*/
}ParkStack;
③当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它停放在便道 上,车辆要按照进入便道的先后顺序顺次存放在便道上; 当有车从停车场上离开后, 便道上
等候的第一辆汽车就立即进入停车场中空出的某个车位。 由于问题描述中限制了便道上的汽
车不能从便道上开走,即便道上的汽车只有在停车位上停放过之后才能离开停车厂, 这样越
早进入便道的汽车就越早进入停车位,而且每次进入停车位的汽车都是处于便道“最前面” 的汽车,显然,这和队列“先进先出”的特点相吻合。
综上所述,使用链队列来模拟便道比较合适,类型定义如下:
typedef struct qnode
{Car data; /*各汽车信息的存储空间*/
struct qnode *n ext;
}Qn ode;
typedef struct
{Qn ode *fron t, *rear; /*用来指示队头和队尾位置的指针 */
}RoadQueue;
④当某辆车要离开停车场的时候, 比它后进停车场的车要为它让路, 而且当它开走之
后让路的车还要按照原来的停放次序再次进入停车位的某个车位上, 为了完成这项功能,需
要再定义一个辅助栈,停车位中让路的车依次 “压入”辅助栈,待提出开走请求的车开走后
再从辅助栈的栈顶依次“弹出”到停车位中。对辅助栈也可采用顺序栈,与停车场栈类似:
typedef struct
{CAR BUFFER[MAX_PARK]; /*各汽车信息的存储空间*/
int top; /*用来指示栈顶位置的静态指针 */
}BUFFER;
?基本功能分析
主控功能:介绍程序的基本功能,并给出程序功能所对应的键盘操作的提示,如车
到来或离去的表示方法,停车场或者便道的状态的查询方法提示等。
汽车到来:首先要查询当前停车场的状态,当停车场非满时,将其驶入停车场(入
栈),开始计费;当停车场满时,让其进入便道等候(入队) 。
汽车离开停车场:当某辆车要离开停车场的
1亿VIP精品文档
相关文档
最近下载
- 刘亦菲英文介绍.ppt
- 16款奔驰GLA200快速使用指南.pdf
- 《GB/T 30104.303-2021数字可寻址照明接口 第303部分:特殊要求 输入设备 占位传感器》.pdf
- 入团积极分子谈话记录(通用5篇).docx VIP
- 《健康教育学》PPT6-健康饮食.pptx VIP
- 京东言犀数字人介绍 2023年 -解决方案中心.docx
- 2024年04月云南省社区(村)基层治理专干招考聘用5000人笔试历年高频考点试题后附答案详解.docx VIP
- 第一章 第一节 物质的分类和转化ppt— 上学期高一化学人教版(2019)必修第一册.pptx
- 年产5万吨丙酮工艺设计.doc
- 2024年04月云南省社区(村)基层治理专干招考聘用5000人笔试历年高频考题摘选后附答案详解.docx VIP
文档评论(0)