1 / 20
文档名称:

数据结构之火车厢重排.docx

格式:docx   大小:197KB   页数:20页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构之火车厢重排.docx

上传人:liwenfei1314 2018/6/12 文件大小:197 KB

下载得到文件列表

数据结构之火车厢重排.docx

相关文档

文档介绍

文档介绍:目录
一、功能描述 3
1、输入火车厢信息 3
2、入轨 3
3、出轨 3
4、退出 3
二、总体概要设计 3
1、系统设计框图: 3
2、系统设计流程图 4
三、详细设计 4
1 功能一:输入火车厢信息 4
1)概要设计: 4
2)算法描述: 4
3)算法分析 5
2 功能二:入轨 5
1)概要设计: 5
2)算法描述: 5
3)算法分析: 8
3 功能三:出轨 8
1)概要设计 8
2)算法描述: 9
3)算法分析: 11
4 功能四:退出 11
四、效果及存在问题 11
1、效果显示: 11
1)输入火车厢信息 11
2)入轨 12
3)出轨: 12
4)显示重排完成车厢排列 13
2、存在问题 13
五、心得及体会 14
六、参考文献 14
七、评分表(见尾页) 14
附录:源代码 15
一、功能描述
1、输入火车厢信息
设置欢迎界面,引导用户输入火车厢总长及原始火车厢排列,给系统提供必要数据信息。
2、入轨
给出每节火车厢对应转入的缓冲铁轨提示,并显示所需缓冲铁轨数。
3、出轨
给出每节火车厢出轨提示。
4、退出
如果不需要操作就退出系统。
总体概要设计
建立一个堆栈数组及栈顶指针数组,将所有的车厢都压入到堆栈(缓冲铁轨)中,入轨方法是使得每个堆栈里的元素从栈底到栈顶都是依次递减的,每次单节车厢出栈时,只要找到最小的栈顶元素令其依次出栈便可得到排好序的火车厢排列。
1、系统设计框图:
2、系统设计流程图
三、详细设计
1 功能一:输入火车厢信息
1)概要设计:
通过printf语句设置欢迎界面及显示让用户输入火车厢总长及火车
原始排列信息,并在屏幕上显示火车原始排列。
2)算法描述:
流程图: 在总流程图已经画出中,此处不再累述
功能代码:
int i,M,A[100],N=0;
printf("\n\n");
printf("************************************************************\n\n");
printf("===============您好,欢迎光临火车转轨系统!===============\n\n");
printf("请输入您要进行转轨的火车车厢总长:");
scanf("%d",&M);
printf("\n请输入未转轨前车厢的排列顺序,请不要重复输入相同且不要遗漏输入车厢号\n\n");
for(i=0;i<M;i++)
{
scanf("%d",&A[i]);
}
printf("未转轨前的火车厢排列如下,请核对:\n");
for(i=0;i<M;i++)
printf("A[%d]=%d\n",i,A[i]);
3)算法分析:
此功能模块简单明了没有深度算法,在此不做分析。
2 功能二:入轨
1)概要设计:
通过比较栈顶元素的大小的方法使得每个缓冲铁轨中车厢的排序是依次递减排列。本自定义的函数实现过程中调用了将初始化一个堆栈函数及单个元素进栈函数,实现需要的时候重新初始化一个堆栈并找到合适的堆栈存放车厢号后就将车厢进栈的操作。
2)算法描述:
流程图:
:

代码:
void init(STLink top[],int m) /*初始化堆栈*/
{

top[m]=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 trainpush(int M,int A[],STLink top[])
{
int m,k=0,l;
top[k]=NULL; /* 初始化第一个堆栈*/
push(top,A[0],0); /*把第一节车厢压入缓冲铁轨*/
printf("缓冲铁轨: 1 栈顶值:%d\n",top[0]->data);
for(m=1;m<M;m++) /*把车厢都压入缓冲铁轨*/
{
if(A[m]>top[k]->data) /*前面所有栈顶值最大值一定为最后一个栈的栈顶值,如果此次需进栈的车厢号比前面所有栈顶值都大重新建立一个新的栈并把车厢号压入新的栈的栈底*/
{
init(top,++k);