数据结构课程设计说明书--- 车厢调度问题.doc_第1页
数据结构课程设计说明书--- 车厢调度问题.doc_第2页
数据结构课程设计说明书--- 车厢调度问题.doc_第3页
数据结构课程设计说明书--- 车厢调度问题.doc_第4页
数据结构课程设计说明书--- 车厢调度问题.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

车厢调度问题 摘要: 实现栈的基本操作,即实现类型。程序对栈的任何存取,即更改,读取和状态判别等操作,必须借助于基本操作。在操作过程中的任何状态下都有两种可能的操作:“入”“出”。 每个状态下处理问题的方法都是相同的,具有递归特性 。关键字:栈 递归 打印 0.引言数据结构是计算机科学与技术、软件工程及相关学科的专业基础课,也是软件设计的技术基础。数据结构课程的教学要求之一是训练学生进行复杂的程序设计的技能和培养良好程序设计的风格,其重要程度决不亚于理论知识的传授,因此课程设计环节是一个至关重要的环节,是训练学生从事工程科技的基本能力,是培养创新意识和创新能力的极为重要的环节。基本要求如下:(1) 熟练掌握基本的数据结构;(2) 熟练掌握各种算法;(3) 运用高级语言编写质量高、风格好的应用程序。1.需求分析(1)这个实验要求我用栈实现车厢调度.(2)车厢的个数是由用户输入的.(3)程序会自动给车厢进行从1到 n的编号.(4)用户输入车厢个数后,程序打印出所有可能的车厢出站顺序.2.数据结构设计 在这个程序中存储结构是栈,对于栈的声明和定义如下:typedef struct sqstack int *top; /*栈顶指针*/ int *base; /*在栈构造之前和销毁之后.base的值为null*/ int stacksize; /*当前分配的存储空间*/ sqstack; /*顺序栈的结构体声明和定义*/3.算法设计3.1 对算法的简单描述 这个实验中, 要求用到栈. 实现栈的基本操作,即实现类型。程序对栈的任何存取(即更改,读取和 状态判别等操作)必须借助于基本操作。在操作过程中的任何状态下都有两种可能的操作:“入”“出”。 每个状态下处理问题的方法都是相同的,具有递归特性 。栈实现是方便的 无论如何调度,我们的操作都是入栈和出栈,设定入栈为1,出栈为-1,对n列车 厢有2n次这样的操作,例如n=4,则有操作1111-1-1-1-1、1-11-11-11-1等.所以还要构造一个操作命令队列trainlist。在算法中还要用到递归算法,其本质为:一个数的进栈以后 有两种处理方式: 要么立刻出栈,或者下一个数的进栈。 一个数的出栈以后 也有两种处理方式:要么继续出栈(栈不为空),或者下一个数的入栈。3.2栈的基本操作3.2.1构造一个栈void initstack2(sqstack *s,int base_size) s-base=(int *)malloc(base_size * sizeof(int); if(!s-base) puts(error!); return ; s-top=s-base; s-stacksize=base_size; /*构造一个空栈*/ 3.2.2 插入新的栈顶元素void push2(sqstack *s, int e) *(s-top+)=e; /*插入元素e为新的栈顶元素*/3.2.3 输出栈顶元素void pop2(sqstack *s) int e; if(s-top=s-base) puts(error); return ; e=*-s-top; printf(%d ,e); /*若栈不空,则删除s的栈顶元素,用e返回其值*/3.3 输入车厢数并给车厢编号printf(please input the number of the trains:); scanf(%d,&trainsize); if(trainsize=33) puts(the number is wrong!); return; for(i=0;i trainsize;i+) trainsourcei=i+1; /*给火车贴上从1到trainsize的编号*/4 程序实现4.1 源代码#include #include typedef struct sqstack int *top; int *base; int stacksize; sqstack; struct sqstack stack; /*定义一个栈变量*/ int trainsize; /*车厢个数*/ int trainsource33; /*车厢数组*/ void show(int list_in);/*打印*/ void schedule(int list_in,int source_num,int list_num); /*对第source_num 号车厢进行处理*/ void initstack2(sqstack *s,int base_size) s-base=(int *)malloc(base_size * sizeof(int); if(!s-base) puts(error!); return ; s-top=s-base; s-stacksize=base_size; void push2(sqstack *s, int e) *(s-top+)=e; void pop2(sqstack *s) int e; if(s-top=s-base) puts(); return ; e=*-s-top; printf(%d ,e); void trainschedule() int i; int trainlist66; printf(please input the number of the trains:); scanf(%d,&trainsize); if(trainsize=33) puts(wrong length!); return; for(i=0;i trainsize) return; for(i=0;i50;i+) trainlisti=-1; for(i=0;i=list_num-1; i+) trainlisti=list_ini; sum=sum+trainlisti; if(sum != 0) trainlistlist_num=1; schedule(trainlist,source_num+1,list_num+1);/*对下一车厢进行处理*/ for(i=0,judge=0;itrainsize*2;i+) judge=judge+trainlisti; if(source_num = trainsize & judge = 0) show(trainlist); /*打印出可能的列车序列*/ trainlistlist_num=-1; schedule(trainlist,source_num,list_num+1); for(i=0,judge=0;itrainsize*2;i+) judge=judge+trainlisti; if(source_num = trainsize & judge = 0) show(trainlist); /*打印出可能的列车序列*/ else trainlistlist_num=1; schedule(trainlist,source_num+1,list_num+1); for(i=0,judge=0;itrainsize*2;i+) judge=judge+trainlisti; if(source_num = trainsize & judge = 0) show(trainlist); void show(int list_in) /*输出可能的车厢序列*/ int i,cur=0; int length; sqstack stack; initstack2(&stack,trainsize); length=trainsize*2; for(i=0;ilength;i+) if(list_ini=1) push2(&stack,trainsourcecur+); else if(list_ini=-1) pop2(&stack); else puts(error!); puts(); int main() trainschedule(); getchar(); getchar(); 4.2 运行结果 运行结果如下: 不足之处在于对车厢个数进行了限制,车厢数越小越稳定.还有就是一次只能对一组车厢进行调度.5.设计体会在进行课程设计的过程中,先把问题具体化,再进行编程.车厢调度问题是个很老的问题,它的难

温馨提示

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

评论

0/150

提交评论