车厢调度问题课程设计报告.docx
- 文档编号:30109056
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:13
- 大小:118.10KB
车厢调度问题课程设计报告.docx
《车厢调度问题课程设计报告.docx》由会员分享,可在线阅读,更多相关《车厢调度问题课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
车厢调度问题课程设计报告
课程设计报告
课程名称数据结构课程设计
选题名称车厢调度
班级A1401姓名王蓉学号02
实验组别同组实验者
完成时间2016年1月4日至2016年1月15日
指导教师卫丽华
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,SElemTypee)//若分配空间成功,则在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已存在。
操作结果:
从栈底到栈顶依次对S中的每个元素调用函数visit().
核心算法
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时
4.3、测试过程中遇到的主要问题及采取的解决措施
车厢长度过长的话程序运行需要等待较长的时间,但程序本身是没有错的,因此就通过取小一点的车厢长度来测试,例如n<=10.
5、源程序清单
#include〈stdio。
h>
#include〈stdlib。
h>
typedefintSElemType;
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;
else
return*(-—(s->top));
}
StatusEmptystack(SqStack*s)//判断是否栈空
{
if(s-〉top==s—〉base)
return1;
else
return0;
}
StatusFullstack(SqStack*s)//判断是否栈满
{
if(s—>top—s-〉base==final)
return1;
else
return0;
}
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车厢 调度 问题 课程设计 报告