车厢调度问题课程设计报告.docx
- 文档编号:6185309
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:11
- 大小:72.99KB
车厢调度问题课程设计报告.docx
《车厢调度问题课程设计报告.docx》由会员分享,可在线阅读,更多相关《车厢调度问题课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
车厢调度问题课程设计报告
和通理工辜洗
课程设计报告
课程名称
数据结构课程设计
选题名称
车厢调度
班级A1401
姓名王蓉
学号02
实验组别
同组实验者
完成时间2016
年1月4日至2016
年1月15日
指导教师
卫丽华
1、数据结构课程设计任务书3
1.1、题目3
1.2、要求3
2、总体设计3
2.1、功能模块设计3
2.2、所有功能模块的流程图3
3、详细设计4
3.1、程序中所采用的数据结构及存储结构的说明错误!
未定义书签。
3.2、算法的设计思想错误!
未定义书签。
4、调试与测试7
5、源程序清单9
6、C程序设计总结13
7、致谢13
8、参考文献13
1、数据结构课程设计任务书
1.1、题目
车厢调度
1.2、要求
假设在铁路调度站(如教科书图3.1(b)所示)入口处的车厢序列的编号依次为1,2,3,...,n。
设计一个程序,求出所有可能由此输出的长度为n的车厢序列。
首先在教科书上提供的栈的顺序存储结构Seqstack之上实现栈的基本操作,即实
现栈类型。
程序对栈的任何存取(即更改,读取和状态判别等操作)必须借助于基本操作进行。
2、总体设计
2.1、功能模块设计
根据课程设计题目的功能要求,各个功能模块的组成框图如下:
主程序模块
栈模块
递归模块
2.2、
所有功能模块的流程图
定义一个空栈
3、详细设计
3.1、程序中所采用的数据结构及存储结构的说明
1)栈类型;
typedefstructstacklist{
SElemType*base;
SElemType*top;intstacksize;
}SqStack;
栈的基本操作设置如下:
voidStack_init(SqStack*s)〃初始化,设s为空栈
voidStack_Push(SqStack*s,SEIemTypee)〃若分配空间成功,则在s的栈顶插
入新的元素e,并返回TRUE
//若栈不变,并返回FALSE
SElemTypeStack_Pop(SqStack*s)
StatusStack_Empty(SqStack*s)
StatusStack_Full(SqStack*s)
voidStack_printreverse(SqStacks)
voidsearch(SqStack*inputPoint,SqStack*tempPoint,SqStack*outputPoint)
3.2、算法的设计思想
1.定义栈
2.初始化三个栈input,temp,output
3.for循环控制输出语句,车厢号依次进栈
4.调用函数Stack_Push(&input,i);
search(&input,&temp,&output);输出所有情况基本操作:
InitStack(&S)操作结果:
构造一个空栈S。
DestroyStack(&S)
初始条件:
栈S已存在。
操作结果:
销毁栈S。
ClearStack(&S)初始条件:
栈S已存在。
操作结果:
将栈S清为空栈。
StackLength(S)初始条件:
栈S已存在。
操作结果:
返回栈S的长度。
StackEmpty(S)初始条件:
栈S已存在。
操作结果:
若S为空栈,则返回1,否则返回0。
GetTop(S,&e)
初始条件:
栈S已存在。
操作结果:
若S不空,则e返回栈顶元素。
Push(&S,&e)
初始条件:
栈S已存在。
操作结果:
在s的栈顶插入新的栈顶元素e。
Pop(&S,&e)初始条件:
栈S已存在。
操作结果:
删除S的栈顶元素,并以e返回其值。
StackTraverse(S,visit())初始条件:
栈S已存在。
visit()。
操作结果:
从栈底到栈顶依次对S中的每个元素调用函数核心算法
voidsearch(SqStack*input,SqStack*temp,SqStack*output){
要么
要么
if(!
Emptystack(input))//一个数进栈后,有两种处理方式:
要么立刻出栈进行下一个数的进栈
{
Push(temp,Pop(input));search(input,temp,output);
Push(input,Pop(temp));
}
if(!
Emptystack(temp))//一个数出栈后,有两种处理方式:
要么继续出栈继续下一个数的进栈
{
Push(output,Pop(temp));search(input,temp,output);
Push(temp,Pop(output));
}
if(Fullstack(output))//栈满时输出序列产生,输出
{
total++;
PrintStack(*output);
}
}
主函数描述
voidmain()
{
SqStackinput,temp,output;
inti;
printf("\n\n\t\t\t\t车厢调度\n");
printf("\n\t请输入车厢长度:
");scanf("%d",&final);
printf("\n\t车厢序列为:
\n");
//将栈初始化
Initstack(&input);
Initstack(&temp);
Initstack(&output);
//将车厢号码进栈
for(i=final;i>=1;i--)
Push(&input,i);
search(&input,&temp,&output);//输出所有可能出现的情况}
4、调试与测试
4.1、调试方法与步骤
运行该程序
输入车厢长度3,显示结果
输入车厢长度5,显示结果
程序运行成功
4.2、测试结果的分析与讨论
(测试要写出测试用例及每个用例结果的的截图)
运行该程序
当车厢长度为3时
当车厢长度为5时
c■'"D:
\Prn 车卿序列为! [11LE431i[Zl=-1E321[31143"S21[41=-43ZBi[SII<3215[Bl=1E2*1[71r14^21[Bl: 343&1[9lr14215 [It]: 3 Z £ 弓 1 [11]; 3 ± 4 5 1 [12]: J 2 4 L 石 [i£]; 3 2 1 5 [ill: 0 1 之 £ [i¥l; Z ¥ 4 3 1 MH 霍 5 ) 1 [17]= 2 斗 3 ■5 1 m 2 4 j § [if]: E 5 -1 1 r2AiE 左 3 4 5 1 4.3、测试过程中遇到的主要问题及采取的解决措施 车厢长度过长的话程序运行需要等待较长的时间,但程序本身是没有错的,因此 就通过取小一点的车厢长度来测试,例如n<=10。 5、源程序清单 #inelude #include typedefintSEIemType; typedefintStatus; intfinal;//最后一个车厢的号码(车厢长度) inttotal=0;//车厢序列的总个数 typedefstruct { SElemType*base;//栈底指针 SElemType*top;//栈顶指针 intstacksize;//栈大小 }SqStack;〃顺序栈 StatusInitstack(SqStack*s){//构造一个空栈 s->base=(SElemType*)malloc(final*sizeof(int));if(! s->base)exit(0); s->top=s->base;s->stacksize=final;//若栈为空,存储分配失败} StatusPush(SqStack*s,SElemTypee)//插入元素e为新的栈顶元素{ *(s->top)++=e; } SElemTypePop(SqStack*s)//若栈不为空,则删除s的栈顶元素 {if(s->top==s->base)return0; elsereturn*(--(s->top)); } StatusEmptystack(SqStack*s)//判断是否栈空 {if(s->top==s->base)return1; else return0; } StatusFullstack(SqStack*s)//判断是否栈满 { if(s->top-s->base==final)return1; elsereturn0; } StatusPrintStack(SqStacks)//输出车厢序列的总个数 { int*p; p=s.base;printf("\t[%ld]: ",total); for(;p! =s.top;) printf("%d",*p++); printf("\n"); } voidsearch(SqStack*input,SqStack*temp,SqStack*output) { if(! Emptystack(input))//一个数进栈后,有两种处理方式: 要么立刻出栈,要么进行下一个数的进栈 { Push(temp,Pop(input));search(input,temp,output); Push(input,Pop(temp)); } if(! Emptystack(temp))//一个数出栈后,有两种处理方式: 要么继续出栈,要么继续下一个数的进栈 { Push(output,Pop(temp)); search(input,temp,output); Push(temp,Pop(output)); } if(Fullstack(output))//栈满时输出序列产生,输出{ total++; PrintStack(*output); } } //主函数 voidmain() { SqStackinput,temp,output; inti; printf("\n\n\t\t\t\t车厢调度\n");printf("\n\t请输入车厢长度: "); scanf("%d",&final); printf("\n\t车厢序列为: \n"); //将栈初始化 Initstack(&input);Initstack(&temp); Initstack(&output); //将车厢号码进栈for(i=final;i>=1;i--)Push(&input,i); search(&input,&temp,&output);//输出所有可能出现的情况} 6、C程序设计总结 该程序设计的初期我只知道顺序栈的实现,通过图书馆以及网络资源的共享,我知道了递归的使用,更加利于有车厢调度的实现。 虽然能够有效运行车厢的所有序列,但只针对车厢长度较小的车厢长度,一旦车厢长度过大,程序的运行任然需要一定的时间,此方面还要深入研究。 7、致谢能够完成这次课程设计必须感谢数据结构课程老师卫丽华,在她的帮助下我抓住了该课程设计的核心,能够理解并实现了代码的成功运行。 8、参考文献 [1]严蔚敏。 《数据结构习题》,清华大学出版社 [2]管致锦。 《数据结构》,清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车厢 调度 问题 课程设计 报告