车厢调度问题课程设计.docx
- 文档编号:5256571
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:9
- 大小:40.15KB
车厢调度问题课程设计.docx
《车厢调度问题课程设计.docx》由会员分享,可在线阅读,更多相关《车厢调度问题课程设计.docx(9页珍藏版)》请在冰豆网上搜索。
车厢调度问题课程设计
正文
一、题目分析
课程设计题目
车厢调度:
假设停在铁路调度站的车厢序列的编号依次为1,2.,3,…..n。
设计一个程序,求出所有可能输出的长度为n的车厢序列。
基本要求
首先在教科书3.1.2节中提供的栈的顺序结构SqStack之上实现栈的基本操作,即实现栈类型。
程序对栈的任何存取(即更改,读取和状态判别等操作)必须借助于基本操作进行。
二、概要设计
1.设定栈的抽象数据类型定义:
ADTStack{
数据对象:
D={
∈CharSet,i=1,2,...,n,,n≥0}
数据关系:
R1={<
∈D,i=2,...,n}
基本操作:
InitStack(&S)
操作结果:
构造一个空栈S。
DestroyStack(&S)
初始条件:
栈S已存在。
操作结果:
销毁栈S。
ClearStack(&S)
初始条件:
栈S已存在。
操作结果:
将栈S清为空栈。
StackLength(S)
初始条件:
栈S已存在。
操作结果:
返回栈S的长度。
StackEmpty(S)
初始条件:
栈S已存在。
操作结果:
若S为空栈,则返回TURE,否则返回FALSE。
GetTop(S,&e)
初始条件:
栈S已存在。
操作结果:
若S不空,则e返回栈顶元素。
Push(&S,&e)
初始条件:
栈S已存在。
操作结果:
在s的栈顶插入新的栈顶元素e。
Pop(&S,&e)
初始条件:
栈S已存在。
操作结果:
删除S的栈顶元素,并以e返回其值。
StackTraverse(S,visit())
初始条件:
栈S已存在。
操作结果:
从栈底到栈顶依次对S中的每个元素调用函数visit()。
}ADTStack
2.本程序包含两个模块
1)主程序模块:
Voidmain()
{
初始化;
For循环
}
2)栈模块——实现栈的抽象数据类型
各模块之间的调用关系如下:
主程序模块
栈模块
三、详细设计
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)
2)代码
#include
usingnamespacestd;
typedefintSElemType;
typedefintStatus;
intend;/*最后一个车厢的号码*/
longtotal=0;/*总的组合方案数目*/
typedefstructstacklist
{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
voidStack_init(SqStack*s)
{
s->base=(SElemType*)malloc(end*sizeof(int));
if(!
s->base)exit(0);
s->top=s->base;
s->stacksize=end;
}
voidStack_Push(SqStack*s,SElemTypee)
{
*(s->top)++=e;
}
SElemTypeStack_Pop(SqStack*s)
{
if(s->top==s->base)
return0;
return*(--(s->top));
}
StatusStack_Empty(SqStack*s)
{
if(s->top==s->base)
return1;
return0;
}
StatusStack_Full(SqStack*s)
{
if(s->top-s->base==end)
return1;
return0;
}
voidStack_printreverse(SqStacks)
{
int*po;
po=s.base;
printf("\t[%ld]:
",total);
for(;po!
=s.top;)
printf("%d",*po++);
printf("\n");
}
voidsearch(SqStack*inputPoint,SqStack*tempPoint,SqStack*outputPoint)
{
if(!
Stack_Empty(inputPoint))
{
Stack_Push(tempPoint,Stack_Pop(inputPoint));
search(inputPoint,tempPoint,outputPoint);
Stack_Push(inputPoint,Stack_Pop(tempPoint));
}
if(!
Stack_Empty(tempPoint))
{
Stack_Push(outputPoint,Stack_Pop(tempPoint));
search(inputPoint,tempPoint,outputPoint);
Stack_Push(tempPoint,Stack_Pop(outputPoint));
}
if(Stack_Full(outputPoint))
{
total++;
Stack_printreverse(*outputPoint);
}
}
主函数:
voidmain()
{
SqStackinput,temp,output;
inti;
printf("\n\n\t\t\t\t车厢调度\n");
printf("\n\t请输入车厢长度:
");
scanf("%d",&end);
/*初始化三个栈*/
Stack_init(&input);
Stack_init(&temp);
Stack_init(&output);
/*将车厢号码进栈*/
for(i=end;i>=1;i--)
Stack_Push(&input,i);
search(&input,&temp,&output);
}
3)主函数流程图
1.栈的数据定义,输出操作信息民,并输入数据2.初始化三个栈input,temp,output
3.for循环控制输出语句,车厢号依次进栈
判断循环结束条件
4.调用函数Stack_Push(&input,i);
search(&input,&temp,&output);
输出所有情况
四、运行结果
输入3,结果如下:
输入4,结果如下:
五、课程设计体会
通过对本学期的数据结构和课程的学习,我完成了本次的课程设计报告,其中得到了很多的体会,也了解到很多的知识点。
我明白了课程设计是大学教育中一个重要的实践教学环节。
在课程设计过程中,我根据具体设计题目,运用自己所学的知识,独立地进行设计和实验。
除了巩固、加深和融合自己所学的数据结构专业课程知识外,更重要的是培养了我多方面的能力,如独立思考能力、综合设计能力、实践动手能力、开拓创新能力、自学能力、文献检索能力等等。
通过这次的课程设计,我也了解到自己所学的一些不足之处,以及一些还不了解的知识点,以后会加强学习。
六、参考文献
1、车厢调度:
参见《数据结构题集》P98。
2、栈和数据结构:
参见《计算机软件技术基础教程》P114、P86。
3、程序编程:
参见《C程序设计》。
4、严蔚敏、吴伟民主编《数据结构》(C语言版)
5、殷人昆等著《数据结构》(C++版)
6、金远平著《数据结构》(C++描述)
7、许卓群等著《数据结构与算法》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车厢 调度 问题 课程设计