车厢调度问题课程设计报告.doc_第1页
车厢调度问题课程设计报告.doc_第2页
车厢调度问题课程设计报告.doc_第3页
车厢调度问题课程设计报告.doc_第4页
车厢调度问题课程设计报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山东交通学院数据结构课程设计车厢调度问题 院(系)别 信息工程系 班 级 计算133 学 号 130811341 姓 名 闫琛 指导教师 王成 时 间 2015-03-092015-03-20 课 程 设 计 任 务 书 题 目 车厢调度问题 系 (部) 信息科学与电气工程学院 专 业 计算机科学与技术 班 级 计算133 学生姓名 闫琛 学 号 130811341 3 月 9 日至 3 月 20 日 共 2 周指导教师(签字) 系 主 任(签字) 年 月 日成 绩 评 定 表作品成绩报告成绩口试(答辩)成绩总评成绩目 录1课程设计概述11.1车厢调度问题功能概述.12车厢调度问题总体设计.1 2.1全局变量定义.1 2.2栈的定义.23.算法设计.2 3.1用到的进出栈算法基础知识.2 3.2程序分析.2 3.2.2 核心算法.4 3.2.3 主程序描述.54.程序实现.5 4.1运行界面.5 4.2不足之处.75. 设计体会.76.结束语.87车厢调度问题 摘要:通过输入车厢系列的编号n,求出所有可能由此输出的长度为n的车厢系列,用入栈出栈的方法,实现车厢调度,并演示每一种出栈序列的过程。任务:假设停在铁路调度站入口处的车厢系列 的编号依次为1,2,3,n。设计一个程序,求出所有可能由此输出的长度为n 的车厢系列。关键字:车厢,调度,栈,递归0. 引言随着人民生活水平的提高,越来越多的人坐火车出去旅游,这也让火车车厢的量大量增大,也随之出现了一个问题,即合理的调度车厢,本课程设计即利用数据结构里的栈的知识,设计一个合理的算法,来解决此问题。1. 需求分析假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3,,n , 设计一个程序,求出所有可能的长度为n 的车厢序列。 实现栈的顺序存储结构SqStack之上实现栈的基本操作,即实现栈类型。程序对栈的基本操作必须借助于基本操作进行。 测试数据取 n=3,4, 程序输出的结果应该在屏幕上显示出来。2. 数据结构设计2.1全局变量定义typedefintSElemType;typedefintStatus;intend;/*最后一个车厢的号码*/longtotal=0;/*总的组合方案数目*/2.2栈的定义typedefstructstacklistvoidStack_init(SqStack*s)voidStack_Push(SqStack*s,SElemTypee)SElemTypeStack_Pop(SqStack*s)StatusStack_Empty(SqStack*s)StatusStack_Full(SqStack*s)voidStack_printreverse(SqStacks)3.算法设计3.1用到的进出栈算法基础知识(1)根据要求,了解可能要用到的算法:3.1.1进栈(PUSH)算法 若TOP时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作);置TOP=TOP+1(栈指针加,指向进栈地址);S(TOP)=X,结束(X为新进栈的元素);3.1.2退栈(POP)算法若TOP0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作);X=S(SOP),(退栈后的元素赋给X);TOP=TOP-1,结束(栈指针减,指向栈顶)。3.2程序分析3.2.1.栈的数据结构typedefstructstacklistSElemType*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(%ld:,total);for(;po!=s.top;)printf(%d,*po+);printf(n);3.2.2 核心算法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(tem pPoint,Stack_Pop(outputPoint);if(Stack_Full(outputPoint)total+;Stack_printreverse(*outputPoint);3.2.3 主程序描述voidmain()SqStackinput,temp,output;inti; printf(请输入车厢数(2-30)n);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);printf(thetotal:%ldn,total);getch();4.程序实现4.1运行界面(1) 运行主界面(2) 当输入n的值为3时,屏幕显示(3) 当输入n的值为4时,屏幕显示4.2不足之处我这个程序主要通过设置三个栈来实现,核心算法通过两次递归调用实现。可以实现任务书里所要求的功能,但是也存在着不足之处,就是在运行界面,输出n值,按回车键,得到输出结果后,要想继续输入另一数值n,不能返回,只有退出,重新运行,才能输入得到输出结果。 5.设计体会看到自己写的程序成功的运行真是种莫大的欣喜!很多时候,总是感觉学到的东西不知何用,总想用学过的语言来写些程序,却一直不知道写些什么。终于,机会来到了,数据结构课程设计,让我一下子回忆起了以前学到的很多语言,于是,就有了运用自己所学的所有语言分别来实现车厢的调度。通过这个星期的课程设计,我的收获还是不少。我的编程水平有了比较大的提高,虽然我做的程序里还有写问题,做的不够深入,但独立完成一个比较大一点的程序的经历也是很宝贵的。6.结束语本课程设计主要是为了实现解决以下问题的程序:假设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论