2栈和队列的应用.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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; ?基本功能分析 主控功能:介绍程序的基本功能,并给出程序功能所对应的键盘操作的提示,如车 到来或离去的表示方法,停车场或者便道的状态的查询方法提示等。 汽车到来:首先要查询当前停车场的状态,当停车场非满时,将其驶入停车场(入 栈),开始计费;当停车场满时,让其进入便道等候(入队) 。 汽车离开停车场:当某辆车要离开停车场的

文档评论(0)

guoxiachuanyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档