




免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
山东理工大学计算机学院课 程 设 计(数据结构)班 级姓 名学 号 指导教师2013年 1 月 7日课程设计任务书及成绩评定课题名称 火车调度问题、题目的目的和要求: 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。 、设计进度及完成情况日 期内 容1月7日选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。1月9日创建相关数据结构,录入源程序。1月11日调试程序并记录调试中的问题,初步完成课程设计报告。1月15日上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。1月16日考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。、主要参考文献及资料1 严蔚敏 数据结构(C语言版)清华大学出版社 19992 严蔚敏 数据结构题集(C语言版)清华大学出版社 19993 谭浩强 C语言程序设计 清华大学出版社4 与所用编程环境相配套的C语言或C+相关的资料、成绩评定:设计成绩: (教师填写)指导老师: (签字)二零一三 年 一 月 七 日目 录第一章 概述1第二章 系统分析2第三章 概要设计第四章 详细设计第五章 运行与测试第六章 总结与心得参考文献第一章 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。数据结构是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是车厢调度。车厢调度问题主要是一个针对火车站,出站进站的几种方案。首先统计出所有的可能的方案,其次就是把这些方案都能转换成“出站”“进站”这种显示形式,最后要提供一个查找功能,核对某种进出站的顺序是否是正确的。第二章 系统分析1.车厢调度就是模拟车厢调度站的工作,与数据结构中栈的存储结构类似,故而栈的基本操作为本程序的核心基础,本程序要求:(1)在程序中输入待进站的车厢序列时,不需要输入所有的车厢编号,只需要输入首列车厢的编号和尾列车厢的编号即可。需要分别输入两个整型数据。(2)程序的输出信息主要是:车厢出站的所有序列,或查找序列的可行性,对于可行性的输出。可附带输出车厢的进出序列。(一连串的:出入出入)(3) 程序的功能包括:对栈的数据结构的基本操作,如入栈,出栈等。以及对车厢进站,出站的操作。2.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言是转化。系统中子程序及功能要求:(1).in(SqStack *s1,SqStack *s2,int first,int final,int num):对车厢进行入站操作。并记录操作的次数。题目要求的一对整形数据的输入 (2)show(SqStack *s,int way):所有进站,出站完成后对输出序列进行输出。(3)out(SqStack *s1,SqStack *s2,int first,int final,int num):对车厢行出站操作。并记录操作次数。 (4)Control(SqStack *s1,SqStack *s2,int first,int final,int num):对I n和out函数进行调用。在in和out函数里间接递归。 题目要求的递归在这里可以自然的实现 程序的调用过程如下: 主函数可调用子程序1,3,4; 子程序3可调用子程序4,2; 子程序1可调用子程序4; 子程序4可调用子程序1,3;3.程序执行时的命令:本程序为了使用时的方便,更加大众化,采用菜单式的方式来完成程序的演示,在程序执行过程中不需要什么指令,只需按提示输入相应的内容即可。(提醒:注意输入时格式,否者可能会引起一些错误).4.测试数据。 1 2 3 4 5第三章 概要设计 1、数据机构的设计 在实验中,主要采用了栈的数据结构,因为栈的先进后出的特点是和题目中要求的车厢的进出类似的。栈的操作比较,适合递归算法的使用。 2、系统中用到的基本抽象数据定义如下: ADT Stack 数据元素:可以是任意类型的数据,但必须属于同一个数据对象。 数据关系:栈中数据元素之间是线形关系。 基本操作:(1) Initstack(&s);(2) IsEmpty(&s);(3) IsFull(&s);(4) Push(&s,x);(5) Pop(&s,&x);(6) ClearStack(&s); (7) GetTop(&s,x);ADT Stack3、各部分的功能实现和伪代码如下: (1)、车厢入站的函数编写,伪代码实现如下: void in(SqStack *s1,SqStack *s2,int first,int final,int num) if(首列车厢号!=尾列车厢号+1)输出进出序列的字符串加入一个 “入”; 进站总操作次数减一:if(首列车厢号尾列车厢号+1)首列车厢号+; Control(s1,s2,first,final,num); (2)、车厢的出站的函数编写,伪代码实现如下: Status out(SqStack *s1,SqStack *s2,int first,int final,int num)if(剩下的操作次数=0)输出车厢序列;return 1;if(栈是空的)return 1;int exchange;进出序列字符串加上“ 出”;出栈一;进栈二;总操作次数-;Control(s1,s2,first,final,num);return 1;(3)控制函数的实现,主要是协调车厢出站和入站的函数,伪代码实现如下: int Control(SqStack *s1,SqStack *s2,int first,int final,int num)复制一份栈一的数据;复制一份栈二的数据;复制一份进出序列字符串数据;in(s1,s2,first,final,num);搬回两个栈的复制数据 搬回字符串的数据;out(s1,s2,first,final,num);return 1;(4)输出函数的实现,这一个模块的任务主要是把结果呈现在屏幕上,方面用户使用,伪代码实现如下: void show(SqStack *s,int way) if(way=0) 输出是第几个序列; for(int i=0;itop;i+) 输出栈中的数据;coutendl;elseif(way=1)int sign=1;for(int i=0;itop;i+)if(栈中的数据!=要查找的数据)sign=0;break;if(sign=1)cout已成功查找到序列:;number+; for(int i=0;itop;i+) 输出栈的数据;coutendl;cout车厢的进出序列为:top=-1;return 0;Status StackEmpty(SqStack *s)/判空if(s-top=-1)return 1;elsereturn 0;Status StackFull(SqStack *s)/判断栈满if(s-top=Stack_Size-1)return 1;elsereturn 0;Status Push(SqStack *s,SElemType e)/入栈if(s-top=Stack_Size-1)return 0;s-top+;s-elems-top=e;return 1;Status Pop(SqStack *s,SElemType *e)/出栈if(s-top=-1)return 0;else*e=s-elems-top;s-top-;return 1;(2) 车厢入站函数的详细代码 Status in(SqStack *s1,SqStack *s2,int first,int final,int num)/对车厢进行入队操作,并且纪录次数if(num0)system(pause);if(first!=final+1)myString=myString+入站 ; Push(s1,first);num-;if(firstfinal+1)first+; Control(s1,s2,first,final,num);return 0;(3) 车厢出站函数的详细代码 Status out(SqStack *s1,SqStack *s2,int first,int final,int num)/对所有车厢出站,并且记录次数if(num=0)show(s2,outWay);return 1;if(StackEmpty(s1)return 1;int exchange;myString=myString+出站 ;Pop(s1,&exchange);Push(s2,exchange);num-;Control(s1,s2,first,final,num);return 1;(4) 控制出站入站,递归调用的详细代码 Status Control(SqStack *s1,SqStack *s2,int first,int final,int num)/控制 in 和out函数调用。并且间接递归SqStack Copy1=*s1;/复制两个栈的数据SqStack Copy2=*s2;string CopyString=myString;/复制进出序列字符串数据in(s1,s2,first,final,num);*s1=Copy1;*s2=Copy2;myString=CopyString;out(s1,s2,first,final,num);return 1;(5) 屏幕显示函数的详细代码 Status show(SqStack *s,int way)/对所有出栈、入栈操作,进行显示if(way=0) cout第c+种情况:; for(int i=0;itop;i+) coutelemi ;coutendl;elseif(way=1)int sign=1;for(int i=0;itop;i+)if(s-elemi!=s3.elemi)sign=0;break;if(sign=1)cout已成功查找到序列:;c+; for(int i=0;itop;i+) coutelemi ;coutendl;cout车厢的进出序列为:endl;coutmyStringendl;return 0;主函数的详细代码:#include#include #include#include #define Stack_Size 100 /宏定义方面修改typedef int SElemType;typedef int Status;using namespace std;typedef structSElemType elemStack_Size;int top;int base;SqStack;int c;int outWay=0;string myString;SqStack s3;Status in(SqStack *s1,SqStack *s2,int first,int final,int num);Status show(SqStack *s,int way);Status out(SqStack *s1,SqStack *s2,int first,int final,int num);Status Control(SqStack *s1,SqStack *s2,int first,int final,int num);Status Initstack(SqStack *s)/建立空栈s-top=-1;return 0;Status StackEmpty(SqStack *s)/判空if(s-top=-1)return 1;elsereturn 0;Status StackFull(SqStack *s)/判断栈满if(s-top=Stack_Size-1)return 1;elsereturn 0;Status Push(SqStack *s,SElemType e)/入栈if(s-top=Stack_Size-1)return 0;s-top+;s-elems-top=e;return 1;Status Pop(SqStack *s,SElemType *e)/出栈if(s-top=-1)return 0;else*e=s-elems-top;s-top-;return 1;Status in(SqStack *s1,SqStack *s2,int first,int final,int num)/对车厢进行入队操作,并且纪录次数if(num0)system(pause);if(first!=final+1)myString=myString+入站 ; Push(s1,first);num-;if(firstfinal+1)first+; Control(s1,s2,first,final,num);return 0;Status out(SqStack *s1,SqStack *s2,int first,int final,int num)/对所有车厢出站,并且记录次数if(num=0)show(s2,outWay);return 1;if(StackEmpty(s1)return 1;int exchange;myString=myString+出站 ;Pop(s1,&exchange);Push(s2,exchange);num-;Control(s1,s2,first,final,num);return 1;Status Control(SqStack *s1,SqStack *s2,int first,int final,int num)/控制 in 和out函数调用。并且间接递归SqStack Copy1=*s1;/复制两个栈的数据SqStack Copy2=*s2;string CopyString=myString;/复制进出序列字符串数据in(s1,s2,first,final,num);*s1=Copy1;*s2=Copy2;myString=CopyString;out(s1,s2,first,final,num);return 1;Status show(SqStack *s,int way)/对所有出栈、入栈操作,进行显示if(way=0) cout第c+种情况:; for(int i=0;itop;i+) coutelemi ;coutendl;elseif(way=1)int sign=1;for(int i=0;itop;i+)if(s-elemi!=s3.elemi)sign=0;break;if(sign=1)cout已成功查找到序列:;c+; for(int i=0;itop;i+) coutelemi ;coutendl;cout车厢的进出序列为:endl;coutmyStringendl;return 0;Status diao() int FirstCar;int FinalCar;int num;string myString; SqStack s1,s2;c=1;system(cls);cout*endl;cout*-|车厢调度|-*endl;cout*endl;Initstack(&s1);Initstack(&s2);cout 请输入首列车厢号:endl;coutFirstCar;cout 请输入末尾车厢号:endl;coutFinalCar;if(FirstCarFinalCar)cout 要求输入的首列车厢号不大于尾列车厢号!endl;system(pause);/进入自动返空 diao();num=(FinalCar-FirstCar+1)*2;cout 输出全部车厢序列请按0,查找序列请按1:endl;coutmyString2;if(myString2=1)system(cls);outWay=1;cout请输入要查找的车厢序列:endl;for(int i=FirstCar;is3.elemi-1;elseif(myString2=0)system(cls);outWay=0;elsecout 没有此选项!endl;system(pause);diao ();Control(&s1,&s2,FirstCar,FinalCar,num-);if(c=1)cout您输入的序列不可行!endl;for(int i=0;i+)cout 继续操作请按1 ,结束操作请按0.endl;coutmyString;if(myString=1)diao ();break;elseif(myString
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同与劳务合同范本
- 2025医疗调解协议书
- 厨师技术入股权合同范本
- 叉车岗位合同协议书范本
- 三人合伙幼儿园协议合同
- 入职委托代办协议书范本
- 劳斯莱斯售车协议书范本
- 全屋定制家具的合同范本
- 四川电影学校合作协议书
- 合同协议书副本模板模板
- 制程能力管理办法实用文档
- GB/T 451.3-2002纸和纸板厚度的测定
- GB/T 1303.2-2009电气用热固性树脂工业硬质层压板第2部分:试验方法
- 子痫前期子痫课件
- 部编版《县委书记的榜样-焦裕禄》课件1
- 基础教育改革与发展中的热点问题课件
- 流动式起重机械检验记录表
- 汽车保养基础知识优秀课件
- 青少年运动员 运动损伤的预防 课件
- 2022年十部经典的三级片电影
- 六三制新青岛版四年级科学上册第一单元《动物王国》全部课件(一共5课时)
评论
0/150
提交评论