实验内容:火车车厢重排问题。
实验说明:
转轨站示意图如下:
火车车厢重排过程如下:
3. 模块分析
1.void Output(int& minH,int& minQ,LinkQueueH[],int k,int n)
将车厢从缓冲轨出轨
2.bool Hold(int c,int &minH,int &minQ,LinkQueueH[],int k)
将车厢移入缓冲轨
3.bool Railroad(int p[],int n,int k)
将车厢直接移至出轨
4. 设计分析
用队列解决出列问题,这里采用的是顺序队列的存储结构。
采用的算法思想是:分别对k个队列初始化;初始化下一个要输出的车厢编号nowOut = 1; 依次取入轨中的每一个车厢的编号;如果入轨中的车厢编号等于nowOut,则输出该车厢;nowOut++;否则,考察每一个缓冲轨队列
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++;
如果入轨和缓冲轨的队头元素没有编号为nowOut的车厢,则求小于入轨中第一个车厢编号的最大队尾元素所在队列编号j;如果 j 存在,则把入轨中的第一个车厢移至缓冲轨 j;如果 j 不存在,但有多于一个空缓冲轨,则把入轨中的第一个车厢移至一个空缓冲轨;否则车厢无法重排,算法结束
1