车厢调度问题课程设计报告Word下载.docx
- 文档编号:19188551
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:11
- 大小:72.99KB
车厢调度问题课程设计报告Word下载.docx
《车厢调度问题课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《车厢调度问题课程设计报告Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
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清为空栈。
StackLength(S)初始条件:
返回栈S的长度。
StackEmpty(S)初始条件:
操作结果:
若S为空栈,则返回1,否则返回0。
GetTop(S,&
e)
若S不空,则e返回栈顶元素。
Push(&
S,&
栈S已存在。
在s的栈顶插入新的栈顶元素e。
Pop(&
S,&
e)初始条件:
删除S的栈顶元素,并以e返回其值。
StackTraverse(S,visit())初始条件:
visit()。
从栈底到栈顶依次对S中的每个元素调用函数核心算法
voidsearch(SqStack*input,SqStack*temp,SqStack*output){
要么
if(!
Emptystack(input))//一个数进栈后,有两种处理方式:
要么立刻出栈进行下一个数的进栈
{
Push(temp,Pop(input));
search(input,temp,output);
Push(input,Pop(temp));
}
Emptystack(temp))//一个数出栈后,有两种处理方式:
要么继续出栈继续下一个数的进栈
Push(output,Pop(temp));
Push(temp,Pop(output));
if(Fullstack(output))//栈满时输出序列产生,输出
total++;
PrintStack(*output);
主函数描述
voidmain()
SqStackinput,temp,output;
inti;
printf("
\n\n\t\t\t\t车厢调度\n"
);
\n\t请输入车厢长度:
"
scanf("
%d"
&
final);
\n\t车厢序列为:
\n"
//将栈初始化
Initstack(&
input);
temp);
//将车厢号码进栈
for(i=final;
i>
=1;
i--)
//输出所有可能出现的情况}
4、调试与测试
4.1、调试方法与步骤
运行该程序
输入车厢长度3,显示结果
输入车厢长度5,显示结果
程序运行成功
4.2、测试结果的分析与讨论
(测试要写出测试用例及每个用例结果的的截图)
当车厢长度为3时
当车厢长度为5时
c■'
"
D:
\Prn<
ruPicra-xnft7ixuslStuilinbxh*
车卿序列为!
[11LE431i[Zl=-1E321[31143"
S21[41=-43ZBi[SII<
3215[Bl=1E2*1[71r14^21[Bl:
343&
1[9lr14215
[It]:
3
Z
£
弓
1
[11];
±
4
5
[12]:
J
2
L
石
[i£
];
[ill:
之
[i¥
l;
¥
MH
霍
)
[17]=
斗
■5
m
j
§
[if]:
E
-1
r2AiE
左
4.3、测试过程中遇到的主要问题及采取的解决措施
车厢长度过长的话程序运行需要等待较长的时间,但程序本身是没有错的,因此
就通过取小一点的车厢长度来测试,例如n<
=10。
5、源程序清单
#inelude<
stdio.h>
#include<
stdlib.h>
typedefintSEIemType;
typedefintStatus;
intfinal;
//最后一个车厢的号码(车厢长度)
inttotal=0;
//车厢序列的总个数
typedefstruct
//栈底指针
//栈顶指针
intstacksize;
//栈大小
〃顺序栈
StatusInitstack(SqStack*s){//构造一个空栈
s->
base=(SElemType*)malloc(final*sizeof(int));
if(!
base)exit(0);
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)//判断是否栈空
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;
%d"
*p++);
\n"
voidsearch(SqStack*input,SqStack*temp,SqStack*output)
要么立刻出栈,要么进行下一个数的进栈
要么继续出栈,要么继续下一个数的进栈
search(input,temp,output);
if(Fullstack(output))//栈满时输出序列产生,输出{
//主函数
scanf("
Initstack(&
//将车厢号码进栈for(i=final;
i--)Push(&
6、C程序设计总结
该程序设计的初期我只知道顺序栈的实现,通过图书馆以及网络资源的共享,我知道了递归的使用,更加利于有车厢调度的实现。
虽然能够有效运行车厢的所有序列,但只针对车厢长度较小的车厢长度,一旦车厢长度过大,程序的运行任然需要一定的时间,此方面还要深入研究。
7、致谢能够完成这次课程设计必须感谢数据结构课程老师卫丽华,在她的帮助下我抓住了该课程设计的核心,能够理解并实现了代码的成功运行。
8、参考文献
[1]严蔚敏。
《数据结构习题》,清华大学出版社
[2]管致锦。
《数据结构》,清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车厢 调度 问题 课程设计 报告