车厢调度

1、  课程设计的目的

(1) 熟练编写程序,解决实际问题;

(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2、  需求分析

*问题描述:假设停在铁路调度站(如教科书中图3.1(b)所示)入口处的车厢序列的编号依次为1,2,3,…,n。设计一个程序,求出所有可能由此输出的长度为n的车厢序列。

首先在教科书3.1.2节中提供的栈的顺序存储结构SqStack之上实现栈的基本操作,即实现栈类型。程序对栈的任何存取(即更改,读取和状态判别等操作)必须借助于基本操作进行。

3、课程设计报告内容

   概要设计

(1)在分析题目要求的基础上,我首先实现了一个栈类型,结构体定义如下

struct SqStack{

int *base;

int top;

int size;

};

(2)基本操作:

      voidInit(SqStack &S,int m);

      boolEmpty(SqStack S);

      voidPush(SqStack &S,int e);

      intPop(SqStack &S);

      voidPrintf(SqStack &S);

      voidProcess(SqStack &S,SqStack &Q,int i);

3、    调试分析

4、    用户手册

1. 本程序的运行环境为DOS操作系统,执行文件为车厢调度.exe。

2. 进入演示程序后,即显示文本方式的用户界面。

3.输入车厢序列编号,即可得到所有的输出序列。

 

4、小结

一、这次课程设计的心得体会通过实践我的收获如下:

1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。

2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。

3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

二、根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:

1、认真上好专业实验课,多在实践中锻炼自己。

2、写程序的过程中要考虑周到,严密。

3、在做设计的时候要有信心,有耐心,切勿浮躁。

4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。

5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。            

5、程序清单

/*车厢调度*/

#include<iostream>
#include<stdlib.h>
using namespace std;
 
struct SqStack{
       int *base;
       int top;
       int size;
};
 
void Init(SqStack &S,int m)//构造一个大小为m的栈
{
       S.top=0;
       S.base=new int[m];
       S.size=m;
}
 
bool Empty(SqStack S)//判断栈是否为空
{
       return S.top==0;
}
 
void Push(SqStack &S,int e)//入栈
{
       if(S.top>=S.size)
       {
              int *newbase;
              newbase=new int[S.size+10];
              for(inti=0;i<S.top;i++)
              {
                     newbase[i]=S.base[i];
              }
              delete []S.base;
              S.base=newbase;
              S.size+=10;
       }
       S.base[S.top]=e;
       S.top++;
}
 
int Pop(SqStack &S)//出栈
{
       S.top--;
       return S.base[S.top];
}
 
void Printf(SqStack &S)//从下往上打印栈的元素
{
       for(inti=0;i<S.top;i++)
       {
              cout<<S.base[i]<<"";
       }
       cout<<endl;
}
 
void Process(SqStack &S,SqStack &Q,int i)//递归得到所有的可能序列
{
       int static total=0;
       if(i<S.size)
       {
              Push(S,i+1);
              Process(S,Q,i+1);
              Pop(S);
              i--;
       }
       if(!Empty(S))
       {
              Push(Q,Pop(S));
              Process(S,Q,i+1);
              Push(S,Pop(Q));
       }
       if(Q.top==Q.size&&Empty(S))
       {
              total++;
              cout<<"["<<total<<"]";
              Printf(Q);
       }
}
int main()
{
       struct SqStack S,Q;
       int n;
       cout<<"---------------------"<<endl;
       cout<<"| 请输入车厢序列编号  |"<<endl;
       cout<<"---------------------"<<endl;
       cin>>n;
       Init(S,n);
       Init(Q,n);
       cout<<endl;
       cout<<"调度的可能方案"<<endl;
       Process(S,Q,0);
       system("PAUSE");
}

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值