当前位置:文档之家› 预防医学的问答题 复习资料

预防医学的问答题 复习资料

预防医学的问答题 复习资料
预防医学的问答题 复习资料

》》总论

三级预防策略

第一级预防(primary prevention)病因预防

发病前期(无病期)对致病因素采取的预防措施,是预防医学奋斗的最终目标。

第二级预防(secondaryprevention)临床前期预防

做好“三早”工作:早期发现、早期诊断、早期治疗,第二级预防对癌症的控制和治疗尤为重要

第三级预防(tertiaryprevention)临床预防

要做到:病而不残,残而不废,对已患病者,及时治疗,预防并发症和伤残;对已丧失劳动力或残废者通过康复医疗,使能参加社会活动并延长寿命。

》》环境卫生

环境危害对人群健康影响特点

1、广泛性:受影响人群范围广数量多;

2、多样性:各种污染物对人体健康损害形式多种多样;

3、复杂性:毒物间联合作用,毒物作用多途径多方式;

4、长期性:短期不易发现。

环境污染对人群健康的危害

1.急性危害:环境污染物在短时间内大量进入环境,可使暴露人群在短时间内即可出现不良反应、急性中

毒甚至死亡。

2.慢性危害:环境中有害物质以低浓度、长时间反复作用于机体所产生的危害。

a)物质性蓄积:低剂量-中毒阈剂量

b)功能性蓄积:损害未修复-逐渐累积到中毒阈剂量

3.致癌作用(carcinogenesis)

4.致畸作用(teratogenesis):在妊娠期接触外界环境因素而引起后代畸形的作用。

5.致突变作用(mutagenesisi):遗传物质产生变异而影响到生物的遗传性状,分为自发突变和诱发突

环境污染物在环境中的转归

1.污染物的迁移(transfer):污染物的理化性质在环境中不发生改变,只是位置和数量发生变化。2. 污染物的转化(transformation):污染物在环境中通过物理、化学或生物学作用,发生形态改变或转变成另一种物质的过程称为污染物的转化。

3.环境自净(self-purification):少量的污染物一时性地进入环境,可经环境因素的自身力量使污染物浓度或总量降低,使生态系统不致遭到破坏,环境的这种功能称为自净作用。

》》》》水体

富营养化的形成与危害

水体中磷、氮含量过高,使藻类等浮游生物获得丰富营养而大量繁殖的现象。

危害有:

1、严重影响水产养殖业(DO下降);

2、严重污染饮用水水源(有机物增加)。

防止:首先应控制营养物质进入水体。治理富营养化水体,可采取疏浚底泥,去除水草和藻类,引入低营养水稀释和实行人工曝气等措施。

》》》》空气

大气污染引起的健康危害

1.急性危害:多见于大气污染事件(烟雾型烟雾事件、光化学烟雾事件)和严重生产性事故(切尔诺贝利

核电站)

2.慢性危害

a)呼吸功能:COPD

b)免疫功能:降低机体免疫力、诱发变态反应(四日市哮喘病)

3.肺癌:多环芳烃——致癌物

4.间接危害

a)温室效应(greenhouse effect):温室气体含量增加,吸收红外线等长波辐射,使近地表层大气

的气温变暖,并在空间起到温室保护层的作用,直接妨碍地面热量向大气中发散,致使地球表面气

温上升。

b)破坏臭氧层

c)酸雨

d)形成大气棕色云团

室内污染来源

1.生活炉灶和烹调油烟:

a.生活炉灶使用的燃料:矿物燃料(煤、天然气、煤气、液化石油气)和生物燃料(木柴、秸秆、大

牲畜粪便)

b.燃烧产物(combustion products):CO2、CO、NOx、SO2、烟尘等,多为有毒有害物质2.室内人的活动:

a.人体代谢废弃物、谈话咳嗽的飞沫、出汗蒸发出多种气味,

b.吸烟:烟草烟气中至少含有3800种成分,其中致癌物不少于44种。

c.呼吸道传染病患者和带菌(毒)者都可将流感病毒、SARS病毒、结核杆菌、链球菌等病原体随

飞沫喷出污染室内空气。

3.建筑材料、装饰材料和家用化学品

a.建筑材料:砖、石、水泥、钢筋等;

b.装饰材料:涂料、粘胶剂、石灰浆、地板砖等。

c.装饰物品:家具、地毯、挂毯等陈列和展示在室内的物品。

d.家用化学品:居室昆虫杀灭剂、空气清新剂、除臭剂、各种清洁剂及美容化妆品等。

4.室内生物性污染

a.呼吸道传染病患者或病原携带者:

b.病原体随飞沫喷出,污染室内空气,特别是在通风不良、人员拥挤的情况下,空气中有的病原体

如流感病毒、SARS病毒、结核杆菌、链球菌等可存活较长时间而使易感人群发生感染

c.家庭花卉释放的花粉、宠物粪便毛屑、昆虫鳞片、尘螨、真菌孢子等均可成为生物性变应原,

使易感者发生过敏反应

d.军团菌:出现于贮水槽、输水管道、冷却塔、加湿器水槽等处,可通过淋浴喷头、各种喷雾设备

等途径,随水雾喷入室内空气中。人吸入后可感染该菌,严重时患军团菌病(legionnaires,d

isease)。

5.家用化学品:包括喷雾杀虫剂、除臭剂、香水、厕所清洁剂、美容美发喷雾剂等都可释放出一些有害化学物质,并进入室内空气。

6.家用电器的电磁辐射:电视机、电脑、微波炉、电话、手机等

7.来自室外环境:大气污染物可以通过机械通风系统和自然通风渗入室内空气中,常见的如二氧化硫、氮氧化物、一氧化碳、铅、颗粒物等。1984年印度帕博尔市农药厂毒气泄露事件和2003年重庆开县井喷事故分别释放出的异氰酸甲酯和硫化氢造成的许多人死亡的人间悲剧,绝大多数人都是在室内而中毒的。

臭氧空洞是什么,防治措施

平流层中的臭氧层在南极大陆上空形成的空洞。

防治措施:限制和减少臭氧消耗物质的排放。

》》》》地质

地方病基本特点

1.病区发病率和患病率高

2.病区存在病因

3.健康人进入病区也可患病

4.患者迁出病区则病情减轻或痊愈

5.病区的动物也可患病

6.病区的病因得到消除则患病人数显著减少

碘缺乏的原因,流行病学特点,症状

指胚胎发育到成人期由于摄入碘不足所引起的一系列病症,主要有地方性甲状腺肿,地方性克汀病,亚临床克汀病、智力障碍、流产、早产、死产等,由于皆因缺碘所引起,故统称碘缺乏病。是自然环境缺碘所造成的疾病。

“一代粗(粗脖子)、二代傻(克汀病)、三代断根芽(呆傻、先天畸形等不能结婚生育)”

碘缺乏病的病因

1.环境缺碘(引起本病的根本原因)土壤缺碘,造成饮水或饮食中缺碘。

2.膳食营养因素,低蛋白、低热量饮食

3.致甲状腺肿物质,硫氰酸盐、硫葡萄糖苷(存在于蔬菜当中)、药物(如硫脲、洋地黄等)。

碘缺乏病的流行特点

地区分布:山区>平原、内地>沿海、高原> 丘陵、农村>城市

人群分布:任何年龄均可发病

高危人群:婴幼儿、儿童、孕妇、哺乳期妇女????

碘缺乏病的临床表现

1.地方性甲状腺肿(endemicgoiter):机体摄碘不足,甲状腺素的合成不足,反馈性地引起垂体前叶促甲

状腺素(TSH)分泌增加,使甲状腺组织出现代偿性增生,腺体肿大,甲状腺功能减退。

2.地方性克汀病(endemiccretinism):母亲妊娠期严重缺碘→胎儿的甲状腺激素供应不足→胎

儿的生长发育受到一系列障碍,主要是中枢神经系统发育障碍,可引起耳聋、语言障碍、智力障碍等。

骨骼发育不良,导致身材矮小。典型的症状为:聋、哑、呆、小、瘫, 称为克汀病面容。

3.亚临床型克汀病:仅有轻度智力落后,伴轻度神经系统障碍、体格发育障碍或甲状腺功能稍低。常被

误认为“正常人”,在学令前不易被发现,往往在入学后因学习困难才被注意,多见经济条件差,文化水平低的家庭。

地方性氟中毒的病区分型

1、病因:长期饮用或摄入高氟水和食物而引起的一种慢性全身性疾病。来源:饮水型、食物型和煤烟型。

2、病症:

氟斑牙:牙齿先出现白斑、后呈褐色,严重时牙齿破损、脱落。

氟骨症:腰腿痛、关节僵硬,骨胳变形,直致瘫痪、残疾。

3、发病机理:过量氟影响Ca、P的生理代谢,临床表现的靶器官为牙和骨。

4、流行病学特点:

a.发病区域:>1mg/L的高氟山区易感。

b.性别:无关

c.年龄:7~15岁氟斑牙

d.10~15岁以后氟骨症

氟斑牙是氟中毒的敏感指标,而氟骨症则是氟中毒严重的后果。

5、治理措施:

a)选用低氟水作为生活饮用水水源;

b)源水增加除氟工艺处理;

c)家用除氟器:Al2O3除氟技术

6、地区分型:

a.饮水型:主要由于居民长期饮用高氟水所致。分布最广,其特点是饮水中氟含量高于国家饮用水

标准(1.0mg/L),患病率与饮水氟含量呈明显正相关。

b.燃煤污染型:由于居民燃用含高氟煤,敞灶燃煤,灶上无烟囱,并用煤火烘烧粮食、辣椒等,造成

室内空气和食品严重污染,居民吸入污染的空气和食入污染的食品而引起氟中毒。这种类型在我

国西南地区最重。

c.饮茶型:在我国西藏、内蒙古、四川等地的少数民族有饮奶茶的习惯,而煮奶茶的茶叶主要

为砖茶。茶可富集氟。

》》职业卫生

职业病的特点

1.病因的特异性

2.病因大多可以检测,有接触水平剂量-反应关系。

3.存在不同发病集丛。

4.如能早诊断,合理处理,预后较好。

5.大多数职业病,目前尚缺乏特效治疗,应着重预防措施。

职业有害因素有哪些

1)化学因素:生产性毒物(金属、有机溶剂、刺激性气体和窒息性气体、苯的氨基和硝基化合物、农药),

生产性粉尘(二氧化硅粉尘、石棉尘)

2)物理因素:异常气象条件(高气温、高气湿),异常气压,噪声,震动,非电离辐射,电离辐射

3)生物因素:细菌、病毒、真菌

》》》》职业中毒

职业中毒诊断原则

1.职业史:接触毒物的种类程度

2.劳动卫生条件调查:现场工艺状况、毒物浓度、个体防护情况

3.症状和体征:临床表现

4.实验室检查:测定反映毒物吸收、作用和病损的指标

预防职业中毒的原则和措施

1)病因预防:用无毒或低毒代替有毒或高毒原料,降低毒物浓度,同时建立必要的卫生制度,加强个人防

2)发病前预防:进行就业前及定期体检,做到早诊断,早发现,早治疗

3)临床预防:将已受害的患者调离原工作,并进行合理治疗

汞中毒和铅中毒的典型症状

汞中毒

1、全身症状:发热、头晕、乏力、不适;

2、消化系统症状:口中有金属味,食欲下降、恶心、腹痛、腹泻、呕吐;

3、口腔炎症状:几天后发生严重的口腔炎,齿龈及颊粘膜溃烂;

4、皮肤出现红色斑丘疹;

5、呼吸系统症:咳嗽、胸痛、紫绀、间质性肺炎;

6、化验检查:尿汞升高

铅中毒

(一)神经系统

1、神经衰弱综合征

2、多发性神经炎

3、中毒性脑病

(二)血液系统

铅毒性贫血,多呈低色素正常细胞型贫血,卟啉代谢障碍,点彩红细胞、网织红细胞、碱粒红细胞增多等。

(三)消化系统

1、消化功能紊乱

2、腹绞痛

3、铅线

(四)血管症状

1、铅容

2、高血压

(五)内脏损伤经口中毒者,可伴有明显的肝脏损伤

水俣病简述其病因和危害

人群长期暴露于被汞(甲基汞)污染的环境,主要是水体汞(甲基汞)污染和由此导致的鱼贝类等食物甲基汞污染,造成摄入者体内甲基汞蓄积并超过一定阈值所引起的以中枢神经系统损伤为主要中毒表现的环境污染性疾病。

水俣病的临床表现:

成年水俣病患者:视野缩小、运动失调、语言障碍、四肢张力障碍等;

胎儿性水俣病患者:智力低下、发育不良、抽搐和发笑、语言困难、动作失常。是母亲在妊娠期因摄入甲基汞,通过胎盘侵入胎儿脑组织所致。

铅针对那些器官有毒副作用

甲基汞特性:脂溶性、原型蓄积、高神经毒

甲基汞中毒的靶器官:脑,甲基汞在脑中的浓度是血液中的6倍;通过血脑屏障导致中枢神经系统受损,

主要侵害大脑皮层的运动区、感觉区和视觉听觉区,有时侵害小脑;通过胎盘屏障,损害胎儿全脑引起胎儿性水俣病

有机磷中毒临床表现

1.急性中毒

a)M样作用

b)N样作用

c)中枢神经症状:头晕、头痛、乏力、烦躁不安、共济失调、昏迷、抽搐、呼吸中枢或呼吸肌麻

d)迟发性神经病:急性中毒症状缓解8-14D感觉障碍,继而下肢无力,直至下肢远端迟缓性瘫痪

2.慢性中毒:多见于农药厂工人,表现为神经衰弱症候群与胆碱酯酶活性降低,可有支气管哮喘、过敏性

皮炎及接触性皮炎

》》》》粉尘

生产性粉尘的危害和预防

1.粉尘在呼吸道的滞留

2.生产性粉尘对人体的致病作用

a)尘肺:矽肺、硅酸盐肺

b)其他呼吸系统疾患:粉尘沉着症,粉尘性支气管炎、肺炎、支气管哮喘,有机粉尘引起的肺部

病变:棉尘病

c)局部刺激作用

d)急慢性中毒

e)肿瘤

“革、水、密、风、护、管、教、查”

影响矽肺发病的因素

1.游离二氧化硅的含量和类型

2.现场粉尘浓度和分散度

3.吸尘作业工龄

4.防护措施

5.个人因素:年龄、营养、习惯、遗传、呼吸道疾病

尘肺和矽肺的定义区别在哪?矽肺的并发症有哪些?

》》》》物理因素

》》营养卫生

》》》》营养素

钙的生理作用,营养缺乏病,列出三种富含钙的食物

生理作用

构成骨骼和牙齿

维持神经和肌肉活动

促进细胞代谢酶的活性

参与血液凝固、激素分泌、酸碱平衡以及维持细胞膜稳定性

缺乏病

儿童——生长发育迟缓、龋齿、佝偻病

成年人——骨质疏松

富含钙的食物:奶、豆类、海产品

膳食纤维概念,来源,生理功能

膳食纤维是指植物性食物不能被人体小肠消化和吸收,但对机体可产生健康效应的碳水化合物。

来源:全谷类、蔬菜、水果。

生理功能:

(1)降低营养素的利用率,控制体重和减肥

(2)改善血糖生成反应

(3)降低血胆固醇

(4)改善大肠功能

简述人体某些维生素缺乏的原因

A:吸收不良;利用障碍;消耗量增加

B1:摄入量不足(米面过精,加工不当);需要量增加

B2:需要量增加

矿物质的基本生理功能

钙:构成骨骼和牙齿;维持神经和肌肉的活动;促进细胞代谢酶的活性;参与血液凝固、激素分泌、酸碱平衡以及维持细胞膜稳定性

铁:参与氧运送和组织呼吸;维持造血功能;维持免疫功能;参与物质转化和合成;参与肝脏解毒

锌:参与含锌酶的组成,作为酶的激活剂,调节组织呼吸、能量代谢及抗氧化过程;参与蛋白质和核酸的合成代谢,促进生长发育;维护正常视觉、味觉、嗅觉和皮肤健康;促进免疫功能

碘:参与甲状腺激素的合成,通过甲状腺激素发挥其生理功能

》》》》合理膳食

膳食营养素参考摄入量包含的内容和各项意义

a.平均需要量:指某一特定性别、年龄及生理状况的群体中的个体对某种某种营养素需要量的平均值。

b.推荐摄入量:指可以满足某一特定性别、年龄及生理状况的群体中绝大多数个体的需要量的摄入水平。

c.适宜摄入量:是通过观察或实验所得的健康人群某种营养素的摄入量。

d.可耐受最高摄入量:指平均每日摄入营养素最高限制量。

中国居民膳食指南

是根据营养学原理,结合当前我国居民营养需要及膳食中存在的实际问题而提出的膳食指南,旨在引导居民选择与搭配食物,达到营养合理、预防膳食相关疾病、促进健康的目的。

1.食物多样、谷类为主、粗细搭配

2.多吃果蔬、薯类

3.每天吃奶类、大豆或其制品

4.常吃适量鱼、禽、蛋和瘦肉

5.少油少盐

火车重排问题

实验报告 实验课名称:数据结构实验二 实验名称:火车重排问题 班级:20130612 学号:13姓名:李寅龙时间:2014-5-18 一、问题描述 ①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 二、数据结构设计 创建队列结构和相关操作函数 typedef struct { int *base; int front; int rear; }SqQueue; int InitQueue(SqQueue &Q){ Q.base=(int *)malloc(MAXSIZE*sizeof(int)); if(!Q.base) exit(-2); Q.front=Q.rear=0; return 1;} int DestroyQueue(SqQueue &Q){//销毁队列 free(Q.base); return 1;} int QueueEmpty(SqQueue Q){//判断队空 return (Q.front-Q.rear)%100==0 ? 1: 0;} int Getfront(SqQueue Q ,int &front){//读取队头元素 if(QueueEmpty(Q)) exit(0); front=Q.base[Q.front];

火车车厢重排问题,队列,c语言

计算机科学与工程学院 《算法与数据结构》试验报告[一] 专业班级10级计算机工程02 试验地点计算机大楼计工教研室学生学号1005080222 指导教师蔡琼 学生姓名肖宇博试验时间2012-4-21 试验项目算法与数据结构 试验类别基础性()设计性()综合性(√)其它()试 验目的及要求(1)掌握队列的特点及其存储方法;(2)掌握队列的常见算法和程序实现。 成 绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成设计任务 30分 程序与报告程序代码规范、功能正确 报告详实完整、体现收获 70分 备注: 评阅教师: 日期:年月日

出 轨 入 轨 581 H 1 H 3 H 2 963 742 出 轨 入 轨 58 H 1 H 3 H 2 96 7 4321 出 轨 入 轨 5 H 1 H 3 H 2 96 87 54321 出 轨 入 轨 H 1 H 3 H 2 987654321 (a) 将369、247依次入缓冲轨 (b) 将1移至出轨,234移至 出轨 (c) 将8入缓冲轨,5移至出轨 (d) 将6789移至出轨 试 验 内 容 一、实验目的和要求 1、实验目的: (1)掌握队列的特点及其存储方法; (2)掌握队列的常见算法和程序实现。 2、实验内容: 火车车厢重排问题。 转轨站示意图如下: 火车车厢重排算法伪代码如下: 出 轨 入 轨 581742963 987654321 H 1 H 3 H 2

1. 分别对k个队列初始化; 2. 初始化下一个要输出的车厢编号nowOut = 1; 3. 依次取入轨中的每一个车厢的编号; 3.1 如果入轨中的车厢编号等于nowOut,则 3.1.1 输出该车厢; 3.1.2 nowOut++; 3.2 否则,考察每一个缓冲轨队列 for (j=1; j<=k; j++) 3.2.1 取队列j 的队头元素c; 3.2.2 如果c=nowOut,则 3.2.2.1 将队列j 的队头元素出队并输出; 3.2.2.2 nowOut++; 3.3 如果入轨和缓冲轨的队头元素没有编号为nowOut的车厢,则 3.3.1 求小于入轨中第一个车厢编号的最大队尾元素所在队列编号j; 3.3.2 如果j 存在,则把入轨中的第一个车厢移至缓冲轨j; 3.3.2 如果j 不存在,但有多于一个空缓冲轨,则把入轨中的第一个车厢移至一个 空缓冲轨;否则车厢无法重排,算法结束; 3、实验要求: 使用顺序存储队列的方式完成该实验。 二、设计分析 根据实验要求,采用队列来完成本次实验。 实验中定义了三个队列,一个用来存储输入的车厢号,另两个用来存储缓存出队顺序及序号。 三、源程序代码 #include #include #define Max 20 typedef struct { int data[Max]; int front,rear; }squeue; void initqueue(squeue *&q) { q=(squeue *)malloc(sizeof(squeue)); q->front=q->rear=0; }

火车调度问题PROJECT

Project1 火车车厢重排调度 年级:2014级 学院:电子与信息工程学院 班级:智能科学与技术、自动化姓名:王金顶 14350046 姓名:王帆 14350045 姓名:张宇航 14350069

【题目要求】 1.问题: 一列火车要将n节车厢分别送往n个车站,车站按照n,n-1,…,1的编号次序经过车站。假设车厢的编号就是其目的地车站的编号。 2.要求: 给定一个任意的车厢排列次序。重新排列车厢,使其按照从1到n的次序排列。规定重排调度时车厢只能从入轨到缓冲铁轨,或者从缓冲铁轨到出轨。【数据结构与算法】 本程序将栈的空间设为25(可以通过全局常量maxstack直接修改),栈的最大数量设为100(可以直接修改)。可以处理任意少于100个任意次序车厢的火车重排调度问题。 流程图如图1:

图1 总流程图【测试数据、结果及分析】 实验1:顺序输入 车厢节数:10 车厢顺序:1 2 3 4 5 6 7 8 9 10 测试结果如图2。

图2 实验1测试结果 测试序列重排成功,使用0个栈,返回值正常,实验程序运行良好。 实验2:倒序输入 车厢节数:10 车厢顺序:10 9 8 7 6 5 4 3 2 1 测试结果如图3。 图3实验2测试结果 测试序列重排成功,使用1个栈,实验程序运行良好。 实验3:乱序输入

车厢节数:10 车厢顺序:3 2 4 5 7 8 9 6 1 10 测试结果如图4。 图4实验3测试结果 测试序列重排成功,使用7个栈,实验程序运行良好。 实验4:乱序输入 车厢节数:25 车厢顺序:25 2 6 4 5 3 7 23 9 19 11 12 16 14 15 13 17 18 10 22 21 20 8 24 1 测试结果如图5。

迷宫问题 火车车厢重排问题 实验报告

实验报告 实验名称:数据结构实验二 实验名称:栈和队列 时间: 班级:000 学号:000 姓名:神刀公子 一、问题描述 (1)迷宫问题 ①问题描述 这是心理学中的一个经典问题。心理学家把一只老鼠从一个无顶盖的大盒子的入口处放入,让老鼠自行找到出口出来。迷宫中设置很多障碍阻止老鼠前行,迷宫唯一的出口处放有一块奶酪,吸引老鼠找到出口。 简而言之,迷宫问题是解决从布置了许多障碍的通道中寻找出路的问题。本题设置的迷宫如图1所示。 入口 出口 图1 迷宫示意图 迷宫四周设为墙;无填充处,为可通处。设每个点有四个可通方向,分别为东、南、西、北。左上角为入口。右下角为出口。迷宫有一个入口,一个出口。设计程序求解迷宫的一条通路。 ②基本要求 ●设计迷宫的存储结构。 ●设计通路的存储结构。 ●设计求解通路的算法。 ●设计迷宫显示和通路的显示方式。 ●输入:迷宫、入口及出口可在程序中设定,也可从键盘输入。 ●输出:迷宫、入口、出口及通路路径。 ③思考 ●若每个点有8个试探方向(东、东南、南、西南、西、西北、北、东北), 如何修改程序? ●如何求得所有通路? ●如何求得最短通路? (2)火车车厢重排问题 ①问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为

了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 ③思考 ●如果缓冲轨按后进先出的方式工作,即用栈表示缓冲轨,应如何解决火 车车厢重排问题? 二、数据结构设计 迷宫问题和火车重排问题可以通过栈与队列实现的。迷宫的进出和车厢的出入轨和缓冲轨主要是对栈与队列的判断和操作。 int empty( STLink top[],int n) /*判断是否为空*/ { return (top[n]==NULL); } int push(STLink top[],int A,int m) /*入栈*/ { STLink p; if(!(p=(STLink)malloc(LEN))) return 0; else { p->data=A; p->link=top[m]; top[m]=p; return 1; } } int pop(STLink top[],int m) /*出栈*/ { int A; STLink p;

迷宫问题 火车车厢重排问题 实验报告材料

实验报告

了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。 车厢的重排工作可以通过转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。 ②基本要求 ●设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨; ●设计并实现车厢重排算法; ●分析算法的时间性能。 ③思考 ●如果缓冲轨按后进先出的方式工作,即用栈表示缓冲轨,应如何解决火 车车厢重排问题? 二、数据结构设计 迷宫问题和火车重排问题可以通过栈与队列实现的。迷宫的进出和车厢的出入轨和缓冲轨主要是对栈与队列的判断和操作。 int empty( STLink top[],int n) /*判断是否为空*/ { return (top[n]==NULL); } int push(STLink top[],int A,int m) /*入栈*/ { STLink p; if(!(p=(STLink)malloc(LEN))) return 0; else { p->data=A; p->link=top[m]; top[m]=p; return 1; } } int pop(STLink top[],int m) /*出栈*/ { int A; STLink p;

p=top[m]; A=p->data; top[m]=top[m]->link; free(p); return A; } struct Node{ /定义队列 int data; Node* next; }; 三、算法设计 1.迷宫问题: 进入格子后,需要判断此时格子位置周围障碍物的位置,对其进行压栈,判断,然后看是否满足条件,满足就进栈,不满足就弹出,然后输出不能通过建立迷宫: typedef struct LStack { Element elem; struct LStack *next; }*PLStack; int InitStack(PLStack &S) { S=NULL; return 1; } int StackEmpty(PLStack S) { if(S==NULL) return 1; else return 0; } int Push(PLStack &S, Element e) { PLStack p; p=(PLStack)malloc(sizeof(LStack)); p->elem=e; p->next=S; S=p; return 1; }

2012级算法与数据结构实验指导书18

《算法与数据结构》实验指导书 实验课程类别:课程内实验 实验课程性质:必修 适用专业、年级:2012级计算机大类 开课院、系:计算机科学与工程学院 学时:18 编写依据:《算法与数据结构》实验教学大纲 修订时间:2014年2月 《算法与数据结构》课程实验指导书(以下简称:指导书)是针对计算机学院所开设的对应课程的上机实验而编写的教学文件,供学生上机实验时使用。 上机的工作环境要求:Windows 2000或以上操作系统、VC++ 6.0或者其它高级程序设计语言。 学生应按指导教师的要求独立完成实验,并按要求撰写实验报告。 每一个实验,编程上机调试并且提交电子文档实验报告,以学号姓名作为文件名上传。报告内容至少包含如下内容: 1、学生基本情况:专业班级、学号、姓名 2、实验题目、实验内容 3、设计分析 4、源程序代码 5、测试用例(尽量覆盖所有分支) 6、实验总结 一.实验内容与学时分配 序次实验 题目 实验 类型 基本技能训练 学 时 一线性结构综合应用基础性(1)掌握线性结构的常用操作; (2)能够应用线性结构解决比较简单的问题。 10 二非线性结构综合应 用 设计性 (1)掌握树形、图形结构的插入、删除、查找等算法; (2)能够应用二叉树解决比较简单的问题。 4 三查找技术综合应用设计性(1)熟练掌握查找的常用算法; (2)设计和应用查找算法解决简单的实际问题。 2 四排序技术综合应用基础性(1)熟练掌握常用的排序方法,并掌握用高级语言实 现排序算法的方法; (2)深刻理解排序的定义和各种排序方法的特点,并 能加以灵活应用; (3)了解各种方法的排序过程及其依据的原则,并掌 握各种排序方法的时间复杂度的分析方法。 2 二.实验说明

实验2用堆栈解决火车车厢重排问题的编程

实验2用堆栈解决火车车厢重排问题的编程 一、目的 通过对本次实验,我们应: 1、加深对线性表、堆栈的认识; 2、加深接口、类、索引器的认识; 3、掌握堆栈数据结构,并应用堆栈编程解决实际问题。 二、实验准备 1、软件准备:C#.net。 2、参考数据(示例):文件夹“…\实验2\示例”中的数据。 三、实验背景描述 1、问题描述 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1 -n,货运列车按照第n站至第1站的次序经过这些车站。车厢的编号与它们的目的地相同。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号1到n的次序排列。当所有的车厢都按照这种次序排列时,在每个车站只需卸掉最后一节车厢即可。我们在一个转轨站里完成车厢的重排工作,在转轨站中有一个入轨、一个出轨和k个缓冲铁轨(位于入轨和出轨之间)。图3.1a 给出了一个转轨站,其中有k= 3个缓冲铁轨H1,H2和H3。开始时,n节车厢的货车从入轨处进入转轨站,转轨结束时各车厢从右到左按照编号1至编号n的次序离开转轨站(通过出轨处)。在图3.1a 中,n= 9,车厢从后至前的初始次序为5,8,1,7,

4,2,9,6,3。图3.1b 给出了按所要求的次序重新排列后的结果。 图2.1 根据上面的描述,编写程序实现下面的功能: 编写一算法实现火车车箱的重排; 编写程序模拟图2.1所示的具有9节车厢的火车入轨和出轨的 过程。 程序主界面设计如图2.2所示。 图2.2 2、问题分析 为了重排车厢,需从前至后依次检查入轨上的所有车厢。如果正在检查的车厢就是下一个满足排列要求的车厢,可以直接把它放到出轨上去。如果不是,则把它移动到缓冲铁轨上,直到按输出次序要求

火车车厢重排问题

火车车厢重排问题源程序代码 #include #include typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; // 头指针,若队列不空,指向队列头元素 QueuePtr rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置 } LinkQueue; int InitQueue (LinkQueue &Q)// 构造一个空队列Q { Q.front = Q.rear = (QueuePtr) malloc (sizeof (QNode)); if (!Q.front) return 0; // 存储分配失败 Q.front->next=NULL; return 1; } int EnQueue (LinkQueue &Q, int e) // 插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr) malloc (sizeof (QNode)); if(!p) return 0; //队列满 p->data=e; p->next =NULL; Q.rear->next =p; Q.rear =p; return 1; } int DeQueue (LinkQueue &Q) // 若队列不空,则删除Q的队头元素,用e 返回其值,并返回1; 否则返回0

{ QueuePtr p; if (Q.front == Q.rear) return 0; else { p=Q.front->next; Q.front->next=p->next; if(p->next==NULL) Q.front=Q.rear; int m=p->data; free(p); return m; } } int Getfront(LinkQueue &Q)//取队头元素 { if(Q.front==Q.rear) return 0; else return Q.front->next->data; } int Getrear(LinkQueue &Q)//取队尾元素 { if(Q.front==Q.rear) return 0; else return Q.rear->data; } int IsEmpty(LinkQueue &Q)//判断队列为空 { if (Q.front == Q.rear) return 0; return 1; } void Resort(LinkQueue &Q,LinkQueue *H,int k)//火车车厢重排{

数据结构之火车厢重排

目录 一、功能描述 (2) 1、输入火车厢信息 (2) 2、入轨 (2) 3、出轨 (2) 4、退出 (2) 二、总体概要设计 (2) 1、系统设计框图: (2) 2、系统设计流程图 (3) 三、详细设计 (3) 1 功能一:输入火车厢信息 (3) 1)概要设计: (3) 2)算法描述: (3) 3)算法分析 (4) 2 功能二:入轨 (4) 1)概要设计: (4) 2)算法描述: (4) 3)算法分析: (7) 3 功能三:出轨 (8) 1)概要设计 (8) 2)算法描述: (8) 3)算法分析: (11) 4 功能四:退出 (11) 四、效果及存在问题 (11) 1、效果显示: (11) 1)输入火车厢信息 (12) 2)入轨 (12) 3)出轨: (12) 4)显示重排完成车厢排列 (13) 2、存在问题 (13) 五、心得及体会 (14) 六、参考文献 (14) 七、评分表(见尾页).............................. 错误!未定义书签。附录:源代码. (14)

一、功能描述 1、输入火车厢信息 设置欢迎界面,引导用户输入火车厢总长及原始火车厢排列,给系统提供必要数据信息。 2、入轨 给出每节火车厢对应转入的缓冲铁轨提示,并显示所需缓冲铁轨数。 3、出轨 给出每节火车厢出轨提示。 4、退出 如果不需要操作就退出系统。 二、总体概要设计 建立一个堆栈数组及栈顶指针数组,将所有的车厢都压入到堆栈(缓冲铁轨)中,入轨方法是使得每个堆栈里的元素从栈底到栈顶都是依次递减的,每次单节车厢出栈时,只要找到最小的栈顶元素令其依次出栈便可得到排好序的火车厢排列。 1、系统设计框图:

火车车厢重排 问题解决 c++(队列方法)

火车车厢重排问题c++解决方法(队列实现) //Queue.h #ifndef QUEUE_H #define QUEUE_H #include using namespace std; template class Queue { public: virtual void MakeEmpty()=0; virtual void Enqueue(T x)=0; virtual T Dequeue()=0; virtual bool IsEmpty()const=0; virtual bool IsFull()const=0; virtual T GetFirstItem()=0; }; class EmptyQueue { }; class FullQueue { }; #endif //LinkQueue.h //链表队列 #ifndef LINKQUEUE_H #define LINKQUEUE_H #include #include"Queue.h" using namespace std; template struct Node { T date; Node *next; }; template class LinkQueue:public Queue { template friend ostream & operator<<(ostream &s,const LinkQueue &lq);

public: LinkQueue(); ~LinkQueue(); void MakeEmpty(); void Enqueue(T x); T Dequeue(); bool IsEmpty()const; bool IsFull()const; T GetFirstItem(); T GetlastItem(); private: Node *front; Node *rear; }; template LinkQueue::LinkQueue() { front=new Node; front->next=NULL; rear=front; } template LinkQueue::~LinkQueue() { MakeEmpty(); delete front; } template void LinkQueue::Enqueue(T x) { Node *newnode; newnode=new Node; newnode->date=x; newnode->next=NULL; rear->next=newnode; rear=newnode; } template T LinkQueue::Dequeue() { if(IsEmpty()) throw EmptyQueue(); Node *p; p=front->next;

北京邮电大学数据结构第二次实验车厢重排实验报告

数据结构实验报告 实验名称:实验二——车厢重排 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 (1)、实验目的: ①进一步掌握指针、模板类、异常处理的使用 ②掌握栈的操作的实现方法 ③掌握队列的操作的实现方法 ④学习使用栈解决实际问题的能力 ⑤学习使用队列解决实际问题的能力 (2)、实验内容: 一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过转轨站将车厢编号按顺序重新排成1~n。转轨站共有k个缓冲轨,缓冲轨位于入轨和出轨之间。开始时,车厢从入轨进入缓冲轨,经过缓冲轨的重排后,按1~n的顺序进入出轨。缓冲轨按照先进先出方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨中的车厢编号。 2. 程序分析 2.1 存储结构 链队列: 2.2 关键算法分析 (1)、入队操作:(时间复杂度为O(1)) ①.建立新结点:rear->next=new Node ②.移动队尾指针:rear=rear->next

③.赋值:rear->data=x ④.将新结点的next指针域赋为空:rear->next=NULL 入队结构示意图如下: (2)、出队操作:(时间复杂度为O(1)) 算法伪代码如下: ①.保存队头元素指针:Node*p=front->next; ②.如果为空队则抛出异常:if(!p)throw"下溢"; ③.原队头元素出列:front->next=p->next; ④.保存队头数据:T x=p->data; ⑤.释放原队头:delete p; ⑥.若队列变为空队,修改队尾指针:if(!(front->next))rear=front; ⑦.返回出队数据:return x; 出队结构示意图如下: (3)、查找队头元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,则抛出异常:if (!(front->next))throw"上溢"; 2. 否则返回队头元素:return front->next->data; (4)、查找队尾元素:(时间复杂度为O(1)) 算法分析:1.如果是空队列,返回0:if(rear==front) return 0; 2.否则返回队尾元素return rear->data; (5)、车厢重排函数:(时间复杂度为O(n)) 算法分析:1. 建立k+2个新队列:LinkQueue *rail; rail=new LinkQueue[k+2] 2.将n节乱序的车厢放进入轨:cin>>arr[j]; rail[k].EnQueue(arr[j]) 3. 将入轨中的车厢放进缓冲轨中,设置一个变量判断车厢是否成功放进缓冲轨: while((i

数据结构实验题目

实验一线性表 1 实验目的 通过选择下面四个题目之一进行实现,掌握如下内容: ?熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 ?学习指针、模板类、异常处理的使用 ?掌握线性表的操作的实现方法 ?学习使用线性表解决实际问题的能力 2 实验内容 2.1题目1 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。 线性表存储结构(五选一): 1、带头结点的单链表 2、不带头结点的单链表 3、循环链表 4、双链表 5、静态链表 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2.2题目2 利用线性表实现一个通讯录管理,通信录的数据格式如下:

struct DataType { int ID; //编号 char name[10]; //姓名 char ch; //性别 char phone[13]; //电话 char addr[31]; //地址 }; 要求: ?实现通讯录的建立、增加、删除、修改、查询等功能 ?能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。 ?能够保存每次更新的数据(选作) ?能够进行通讯录分类,比如班级类、好友类、黑名单等等(选作) ?编写测试main()函数测试线性表的正确性 2.3题目3 利用线性表实现一个一元多项式Polynomial f(x) = a + a1x + a2x2 + a3x3+ … + a n x n 提示: Polynomial的结点结构如下: struct term { float coef; //系数 int expn; //指数 }; 可以使用链表实现,也可以使用顺序表实现。 要求: ?能够实现一元多项式的输入和输出 ?能够进行一元多项式相加 ?能够进行一元多项式相减 ?能够计算一元多项式在x处的值 ?能够计算一元多项式的导数(选作) ?能够进行一元多项式相乘(选作)

数据结构课程设计题

本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。 二、《数据结构课程设计》的要求 设计中要求综合运用所学知识,解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。 通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 三、《数据结构课程设计》的内容 分析:问题描述; 概要设计:数据结构的设计,算法的设计,抽象数据类型的设计; 详细设计:抽象数据类型对应的C++类定义,设计每个成员函数和主函数(流程图) 实现与测试: 编写课程设计报告: 四、《数据结构课程设计》时间和人员安排 15-16周组织进行汇报演示验收;4个人一组,每个人主要承担的任务

1. 停车场管理 [问题描述] 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 [基本要求] 按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,如汽车的输入数据格式为:(…A?,1,5),(…A?,2,10),(…D?,1,15),(…A?,3,20),(…A?,4,25),(…A?,5,30),(…D?,2,35),(…D?,4,40),(…E?,0,0),其中,…A?表示到达;…D?表示离去,…E?表示输入结束。 对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

浅析队列、栈的应用

学期论文2 专业:计算机科学与技术_______ 班级: U计算机111__________ 学号: 1111503111_________ _ 姓名:于秀芳_________ _ 指导教师:孟敏 ________ __ 完成日期: 2012年11月29日_____ _

浅析队列、栈的应用 于秀芳 (盐城工学院优集学院江苏盐城 224051) 摘要:栈和队列是两种常用的数据结构,广泛应用在操作系统、编译程序等各种软件系统中。从数据结构角度看,栈和队列是操作受限的线性表,栈和队列的数据元素具有单一的前驱和后继的线性关系;从抽象数据类型角度看,栈和队列又是两种重要的抽象数据类型。 关键词:栈和队列;数据结构;编译程序 Analysis Of The Queue, Stack Of Applications YuXiuFang (UGS College, Yancheng Institute of Technology, Yancheng, Jiangsu 224051) Abstract:Stacks and queues are two common data structure widely used operating systems, compilers and other software systems .From the perspective of data structure, stack and queue operation is constrained linear list, stack and queue data elements having a single precursor and successor linear relationship;From the perspective of abstract data types, stacks and queues are two kinds of important abstract data type. Key words: Stack and queue ;Data structure; Compiler program 0引言: 目前我们所学的数据结构包括上学期学过的C++都运用到了栈,队列。 1 栈的逻辑结构 1.1栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。 栈中元素除了具有线性关系外,还具有后进先出的特性。 1.2栈的顺序存储结构及实现 1.2.1栈的顺序存储结构 栈的顺序存储结构称为顺序栈。 顺序栈本质上是顺序表的简化,唯一需要确定的是用数组的那一端表示栈底。通常把数组中下标为0的一端作为栈底,同时附设指针top指示栈顶元素在元组中的位置。设存储栈元素的数组长度为StackSize,则栈空时栈顶指针 top=-1;栈满时栈顶指top=StackSize-1。入栈时,栈顶指针top加1;出栈时,栈顶指针top 减1。 1.2.2顺序栈的实现 (1)栈的初始化 初始化一个空栈只需将栈顶指针top置为1。 (2)入栈操作 Template Void SeqStack::Push(DataType x) {

队列的应用火车车厢重排问题

一、试验课题 队列的应用 实验目的: (1)掌握队列的特点及其存储方法; (2)掌握队列的常见算法和程序实现。 二、试验内容 (1)问题描述:一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。所以,给定任意次序的车厢,必须重新排列它们。车厢的重排工作可以通过国转轨站完成。在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。假定缓冲轨按先进先出飞方式运作,设计算法解决火车车厢重排问题。 (2)基本要求:设计存储结构表示n个车厢、k个缓冲轨以及入轨和出轨;设计并实现车厢重排算法;分析算法的时间性能 三、试验分析 实验说明: 转轨站示意图如下:

2 22 2(a) 将369、247依次入缓冲轨 (b) 将1移至出轨,234移至 出轨 (c) 将8入缓冲轨,5移至出轨 (d) 将6789移至出轨 火车车厢重排过程如下: 火车车厢重排算法伪代码如下:

四、源程序代码 #include using namespace std; const MS=100; template struct QNode { T data; QNode *next; }; template class LiQueue { public: LiQueue( ); //构造函数,初始化一个空的链队列 ~LiQueue( ); //析构函数,释放链队列中各结点的存储空间 void EnQueue(T x); //将元素x入队 T DeQueue( ); //将队头元素出队 T GetFront( ); //取链队列的队头元素 T GetRear(); bool Empty( ); //判断链队列是否为空 QNode *front, *rear; //队头和队尾指针,分别指向头结点和终端结点}; template LiQueue::LiQueue( ) { QNode *s;s=new QNode;s->next=NULL;front=rear=s; } template LiQueue::~LiQueue( ) { QNode *p; while(front) { p=front;front=front->next;delete p; } } template

火车车厢重排实验报告

东华理工大学长江学院数据结构课程设计报告 学号: 09321110 姓名:刘曹杰 指导老师:刘自强 2011年1月3日

队列的应用举例——火车车厢重排一、实验分析 一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1 ~ n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于从列车上卸掉相应的车厢,车厢的编号应与车站(目的地)的编号相同,使各车厢从前至后按编号1到n的次序排列,这样,在每个车站只需卸掉最后一节车厢即可。所以,给定任意次序的车厢,必须重新排列他们。可以通过转轨站完成车厢的重排工作,在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。开始时,n节车厢从入轨进入转轨站,转轨结束时各车厢按照编号1至n的次序离开转轨站进入出轨。假定缓冲轨按先进先出的方式运作,因此可将它们视为队列,并且禁止将车厢从缓冲轨移至入轨,也禁止从出轨移至缓冲轨。图中给出了一个转轨站,其中有3个缓冲轨H1,H2和H3。 为了重排车厢,若有k个缓冲轨,缓冲轨H k为可直接将车厢从入轨移动到出轨的通道,则可用来暂存车厢的缓冲轨的数目为k-1。假定重排9节车厢,其初始次序为5, 8, 1, 7, 4, 2, 9, 6, 3,同时令k=3,如图3-23所示。3号车厢不能直接移动到出轨,因为1号车厢和2号车厢必须排在3号车厢之前,因此,把3号车厢移动至H1。6号车厢可放在H1中3号车厢之后,因为6号车厢将在3号车厢之后输出。9号车厢可以继续放在H1中6号车厢之后,而接下来的2号车厢不能放在9号车厢之后,因为2号车厢必须在9号车厢之前输出。因此,应把2号车厢放在H2的队头。4号车厢可以放在H2中2号车厢之后,7号车厢可以继续放在4号车厢之后。如图3-24(a)所示。至此,1号车厢可通过H3直接移至出轨,然后从H2移动2号车厢至出轨,从H1移动3号车厢至出轨,从H2移动4号

车厢重排问题实验报告

实验报告 1.实验要求 利用队列结构实现车厢重排问题。车厢重排问题如下: 一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,的车厢编号。 提示: 一列火车的每个车厢按顺序从入轨进入不同缓冲轨,缓冲轨重排后的进入出轨,重新编排成一列货车。比如:编号为3的车厢进入缓冲轨1,则下一个编号小于3的车厢则必须进入下一个缓冲轨2,而编号大于3的车厢则进入缓冲轨1,排在3号车厢的后面,这样,出轨的时候才可以按照从小到大的顺序重新编排。 2. 程序分析 2.1 存储结构 本程序采用单链表结构,具体为链队列结构,使用队列结构的先进先出原则可以较好地处理车厢重排问题。链队列结构示意图如下: 2.2 关键算法分析 一、本程序的关键算法主要为处理车厢重排问题的函数TrainPermute(),其伪代码如下: void TrainPermute(): 1. 初始化条件:计数器i=0,与非门aa=1 2. 判断是否能入轨while(用i

相关主题
文本预览
相关文档 最新文档