车厢调度问题课程设计报告.docx

上传人:b****1 文档编号:15015910 上传时间:2023-06-29 格式:DOCX 页数:12 大小:96.46KB
下载 相关 举报
车厢调度问题课程设计报告.docx_第1页
第1页 / 共12页
车厢调度问题课程设计报告.docx_第2页
第2页 / 共12页
车厢调度问题课程设计报告.docx_第3页
第3页 / 共12页
车厢调度问题课程设计报告.docx_第4页
第4页 / 共12页
车厢调度问题课程设计报告.docx_第5页
第5页 / 共12页
车厢调度问题课程设计报告.docx_第6页
第6页 / 共12页
车厢调度问题课程设计报告.docx_第7页
第7页 / 共12页
车厢调度问题课程设计报告.docx_第8页
第8页 / 共12页
车厢调度问题课程设计报告.docx_第9页
第9页 / 共12页
车厢调度问题课程设计报告.docx_第10页
第10页 / 共12页
车厢调度问题课程设计报告.docx_第11页
第11页 / 共12页
车厢调度问题课程设计报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

车厢调度问题课程设计报告.docx

《车厢调度问题课程设计报告.docx》由会员分享,可在线阅读,更多相关《车厢调度问题课程设计报告.docx(12页珍藏版)》请在冰点文库上搜索。

车厢调度问题课程设计报告.docx

车厢调度问题课程设计报告

南逋理工爭院I

程设计

」报

课程名称

数据结构课程设计

选题名称

车厢调度

班级A1401姓名王蓉

学号

02

实验组别

同组实验者

完成时间2016年1月4日至2016年1月

15日

1、数据结构课程设计任务书

错误!

未定义书签。

、题目.

错误!

未定义书签。

、要求.

错误!

未定义书签。

2、总体设计

错误!

未定义书签。

、功能模块设计.

错误!

未定义书签。

、所有功能模块的流程图

错误!

未定义书签。

3、详细设计

错误!

未定义书签。

、程序中所采用的数据结构及存储结构的说明

错误!

未定义书签。

、算法的设计思想

错误!

未定义书签。

4、调试与测试

错误!

未定义书签。

5、源程序清单

错误!

未定义书签。

6、C程序设计总结

错误!

未定义书签。

7、致谢

错误!

未定义书签。

8、参考文献

错误!

未定义书签。

 

1、数据结构课程设计任务书

、题目车厢调度

、要求假设在铁路调度站(如教科书图(b)所示)入口处的车厢序列的编号

依次为1,2,3,…,n。

设计一个程序,求出所有可能由此输出的长度为

n的车厢序列。

首先在教科书上提供的栈的顺序存储结构Seqstack之上实现栈的基本

操作,即实现栈类型。

程序对栈的任何存取(即更改,读取和状态判别

等操作)必须借助于基本操作进行。

2、总体设计

、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如下:

、所有功能模块的流程图n

 

3、详细设计

、程序中所采用的数据结构及存储结构的说明

1)栈类型;

typedefstructstacklist

SEIemType*base;

SEIemType*top;

intstacksize;

}SqStack;

栈的基本操作设置如下:

voidStack_init(SqStack*s)义栈

2.初始化三个栈input,temp,output

循环控制输出语句,车厢号依次进栈

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)

GetTop(S,&e)

Push(&S,&e)

Pop(&S,&e)

 

操作结果:

删除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、调试与测试

、调试方法与步骤运行该程序输入车厢长度3,显示结果

输入车厢长度5,显示结果

程序运行成功

、测试结果的分析与讨论

测试要写出测试用例及每个用例结果的的截图)运行该程序

 

 

当车厢长度为3时

 

当车厢长度为5时

RU

|F■:

■利舒就tTiLrabTir皿跆匚册・巧1尋惟.■:

.■iT

罕s萍却丸.

M1=i--4JTri

HfP:

4■)FIm;

Ml=^1IIh>ari?

*•

1(1=1^431[^■i?

<町F■

ltl=J1f1iIth>

Mai:

illla

N?

i=lif

IM»=|]^J=

I料和

117]=

■3MfJ=

—詔*ii

I-IVIE

I2Zhl

IVeft-t

 

 

、测试过程中遇到的主要问题及采取的解决措施车厢长度过长的话程序运行需要等待较长的时间,但程序本身是没有

错的,因此就通过取小一点的车厢长度来测试,例如n<=ia

5、源程序清单

#inelude<>

#inelude<>typedefintSEIemType;

typedefintStatus;

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;

else

return0;

int*p;

p=;

printf("\t[%ld]:

",total);

for(;p!

=;)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\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]管致锦。

《数据结构》,清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2