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");
}