利用#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(int i=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(int i=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"); }写一个实践报告书
时间: 2024-01-15 12:02:55 浏览: 21
本次实践任务为使用C++编写一个火车调度程序,根据车厢序列编号生成所有可能的调度方案。
首先,我们需要定义一个栈结构,用于存储车厢序列。定义如下:
```
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(int i=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(int i=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");
return 0;
}
```
通过以上步骤,我们就完成了一个简单的火车调度程序。在实践中,我们需要注意栈的操作顺序,避免出现意外结果。同时,我们也可以对程序进行优化,例如使用动态数组避免数组越界等。