火车车厢重排问题

实验二:火车车厢重排问题

班级:2010级数学班 学号:[1**********]7 姓名:裴志威

一.问题描述:

一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,货运列车按照第n站至第1站

的顺序经过这些车站。车厢编号与他们的目的地一样。为了便于从列车上卸掉相应的车厢,必须重排车厢顺序,使得各车厢

从前往后按编号1到n的次序排列。当所有车厢按照这种次序排列时,在每个车站只需卸掉最后一个车厢即可。我们在一个

转轨站里完成重拍的工作,在转轨站有一个入轨,一个出轨和k个缓冲轨(位于入轨和出轨之间)。

二.基本要求:

(1):设计存储结构表示n个车厢,k个缓冲轨以及入轨和出轨,

(2)设计并实现车厢重排算法,

(3)分析算法的时间性能。

三.算法描述:

为了重排车厢,需从前往后依次检查入轨上的所有车厢。如果正在检查的车厢就是下一个满足要求的车厢,可以直接把它放

到出轨上。否则,则把它移动到缓冲轨上,直到按输出顺序要求轮到它的时候才可以将他放到出轨上。缓冲轨是按照FILO

的方式使用的,因为车厢的进出都是在缓冲轨的顶端进行的。

在重排车厢过程中,仅允许以下活动:

1、车厢可以从入轨的前部移动到一个缓冲轨的顶部或者是出轨的左端

2、车厢可以从一个缓冲轨的顶部移动到出轨的左端

在将车厢放入缓冲轨的过程中,应该注意:有空的可以优先放,没空的缓冲轨时,要将新的车厢放在满足以下条件的缓冲轨

中:在缓冲轨的顶部车厢编号比新车厢的编号大的所有缓冲轨中选择顶部车厢编号最小的那个。

四.伪代码:

1. 分别对k个队列初始化;

2. 初始化下一个要输出的车厢编号nowOut = 1;

3. 依次取入轨中的每一个车厢的编号;

3.1 如果入轨中的车厢编号等于nowOut,则

3.1.1 输出该车厢;

3.1.2 nowOut++;

3.2 否则,考察每一个缓冲轨队列

for (j=1; 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 不存在,但有多于一个空缓冲轨,则把入轨中的第一个车厢移至一个空缓冲轨;否则车厢无法重排,算法结束;

五.源程序代码:

#include

#include

#define Max 20

typedef struct

int data[Max]; int front,rear;

}squeue;

void initqueue(squeue *&q)

{

}

void enqueue(squeue *&q,int e)

{

}

void dequeue(squeue *&q)

{

}

int gettop(squeue *&q)

{

}

int getrear(squeue *&q)

{

}

void reset(squeue *&q,squeue *&w1,squeue *&w2,int k)

{

int nowout=1; int n1=0,n2=0; for(int i=0;idata[q->front+1]==nowout) { { } return q->data[q->rear]; return q->data[q->front+1]; q->front=(q->front+1)%Max; q->rear=(q->rear+1)%Max; q->data[q->rear]=e; q=(squeue *)malloc(sizeof(squeue)); q->front=q->rear=0;

} nowout++; dequeue(q); else if(gettop(w1)==nowout) { printf("%d号车厢出轨!\t",gettop(w1)); nowout++; dequeue(w1); } else if(gettop(w2)==nowout) { } else { int c=gettop(q); n1=getrear(w1); n2=getrear(w2); if(n1>n2) { if(c>n1) { } else { enqueue(w2,c); dequeue(q); enqueue(w1,c); dequeue(q); printf("%d号车厢出轨!\t",gettop(w2)); nowout++; dequeue(w2); } else { } if(c>n2) { enqueue(w2,c); dequeue(q);

}

else { enqueue(w1,c); dequeue(q); } } } }

int examenter(int a[],int k)

{

}

void main()

{

squeue *q,*w1,*w2; initqueue(q); initqueue(w1); initqueue(w2); int a[10],k; label: printf("要输入几个车厢?\n"); for(int i=1;i

} for(int i=1;i

六.测试结果

1.输入正确的序列后得到结果如图:

2.如果输入的车厢数有误的时候(为负数或零)

六、总结

本次数据结构实验主要是练习使用队列的思想,我做的是火车重排问题的实验,此实验在课本上有一些讲解,也给出来主要函数TrainPermute()的主要编写思路,减轻了自己的工作量,不过由于此程序的代码比较复杂,在编译调试过程中也很耗费时间,通过设置断点,分步调试,才使得程序没有了bug。例如,由于程序用了较多的循环,包括多重循环,在刚刚写出代码的时候常常陷入死循环,而因为代码冗长,仅仅通过看代码很难找出逻辑上的错误。功夫不负有心人,最后终于用与非门的思想解决了这个死循环问题,并简单优化程序。

总的来说,本程序由于使用了模板类结构,扩展性还算比较好。但是代码部分有些冗长,可读性不算太好。如果要做下

一步工作的话,应该是尽量精简代码,使得程序更加具有实用性和可读性


相关文章

  • 队列的应用火车车厢重排问题
  • 一.试验课题 队列的应用 实验目的: (1)掌握队列的特点及其存储方法: (2)掌握队列的常见算法和程序实现. 二.试验内容 (1)问题描述:一列货运列车共有n节车厢,每节车厢将停放在不同的车站.假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站.为了便于从列车上卸掉相应 ...

  • 火车车厢重排实验报告
  • 东华理工大学长江学院 数据结构课程设计报告 学号: 09321110 姓名: 刘 曹 杰 指导老师:刘自强 2011年1月3日 队列的应用举例--火车车厢重排 一.实验分析 一列货运列车共有n节车厢,每节车厢将停放在不同的车站.假定n个车站的编号分别为1 ~ n,即货运列车按照第n站至第1站的次序经 ...

  • 我已经学会留恋
  • 平顶山因山顶较为平坦,故取名平顶山.这座城市也叫鹰城,而我更喜欢这个称谓.这是第二次长时间的离开这座城市,对于这个城市,我已经学会留恋.不得不说,人们在一个地方长时间停留,是会留下感情的.这段时间发生了很多事情.有欢乐的,有忧伤的.但无论什么,它都是一种生活方式,我们都应经历.此刻,我坐在火车站的候 ...

  • 幼儿园教案中班数学活动--分类
  • 活动产生的背景: "分类"是数学活动中的一个重要内容,在日常生活中也经常要运用.比如:超市里物品的摆放.图书馆里的图书的摆放.家中整理房间等等都要运用到有关的分类知识.新<纲要>中指出要让幼儿从生活和游戏中感受事物并体验到数学活动的乐趣和重要性.为了将枯燥.逻辑性较强 ...

  • 火车卧铺车厢的人机分析报告
  • 火车卧铺车厢的人机分析报告 一. 火车卧铺的人机分析 1第一层卧铺距地面的高度 第一层卧铺距地面的高度应以女性小腿加足高的第10百分位作为依据,女性小腿加足高的第10百分位为350mm,穿鞋的修正量为25mm,即第一层卧铺距离地面的最小高度应为h=350mm+25mm=375mm. 2.第一层卧铺距 ...

  • 中班数学活动:小动物乘火车
  • [活动目标] 1.学习6以内的序数,正确感知物体在序列中的位置. 2.能用序数词准确表达物体在序列中的位置. [活动准备] 1.动物图片.操作材料人手一份. 2.两个箭头标志.1-6数字. [活动过程] 一.谈话导入,引起幼儿兴趣. 师:今天动物园里的小动物可高兴了!因为他们要去旅游啦!看!他们排着 ...

  • 公交车等交通安全逃生知识
  • 公交车.火车.地铁.飞机.小汽车 自救逃生方法 1.先保证呼吸 再找脱身通道 乘客一定要保持冷静,听从司机的指挥,不要拥挤,寻找最近的出路,比如门.窗等,并以最快速度离开车厢,也可利用安全锤破窗逃生.同时,大部分空调客车都在车厢后部设置了逃生门和逃生气窗,坐在车厢后部的乘客可就近迅速打开着两个通道逃 ...

  • 火车旅行 最安全也最美的出行选择|旅行|火车|安全
  • 导语:航空史上最为黑暗的七月阴霾刚刚散去,世界上公认安全系数最高的交通工具--飞机,面临着巨大考验.旅行,是否考虑过火车出行.一提起火车,不要以为是那种车厢里满是方便面味道,大家吆五喝六地玩儿牌或旁若无人地聊天.真正的火车旅行才是奢华旅行.它应该有24小时可以平放的松软大床:它的美食绝不比任何一家五 ...

  • 火车刹车原理
  • 火车刹车原理 在机车里面是靠两个制动阀来完成制动的,一个是单阀,俗称小闸,是机车单机制动的,另一个是自阀,用于整个列车制动.平日里车厢里的制动阀都保持锁闭定位,只由司机在机车内对列车进行制动和缓解.所以说火车在刹车的时候是整列都在刹车,如果只是机车刹车,那么大的惯性还了得啊. 客车和货车的制动原理是 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn