📄 main.cpp
字号:
#include "stdio.h"
#include "Stack.h"
#include "conio.h"
//主程序和Sever函数
void Sever(TwStack &S,int tou,int now,int wei,char ch)
{
//求所有输出序列
int x;
if(StackEmpty(S,0)&&now>wei) //如果栈为空,而且输入序列为空
{
if(ch=='1') //打印输出序列,根据显示模式ch的值,选择不同的打印方式
PrintStack1(S,tou,wei);
else
PrintStack2(S,tou,wei);
return ;
}
if(!StackEmpty(S,0)) //如果栈不空
{
Pop(S,0,x); //一个车厢a出调度站栈;
Push(S,1,x); //并把该车厢a进输出序列栈,即进上栈,代表已输出;
Sever(S,tou,now,wei,ch); //递归Sever(参数不变)
Pop(S,1,x); //还原操作,即把车厢a从输出序列栈中退栈,
Push(S,0,x); //并压回调度站栈
}
if(now<=wei) //如果输入序列不空
{
Push(S,0,now); //一个车厢进b调度站栈
Sever(S,tou,now+1,wei,ch); //递归Sever(改变参数:当前输入车厢编号c+1)
Pop(S,0,x); //还原操作,即把车厢b从调度站栈中退栈
}
}
void main()
{
TwStack S;
char ch,again;
int tou,wei;
InitStack(S);
do{
printf("****************************** 车厢调度演示 *******************************\n");
printf("输入头车厢编号:");
scanf("%d",&tou);
printf("输入尾车厢编号: ");
scanf("%d",&wei);
printf("\t显示模式 1: 简单显示输出的车厢序列\n"); //提供了两种显示模式
printf("\t显示模式 2:显示每一个序列的输出操作序列和状态变化过程\n");
printf("选择一种模式: \n");
while((ch=getch())!='1'&&ch!='2');
if(wei>9&&ch=='2') //用户输入的车厢编号的位数太高,长度太长
{ //系统内部强制性转换
printf("因为车厢编号不是个位数1~9,不能用显示模式2,只能用简单模式1显示\n");
printf("按任意键确认\n");
ch='1';
getch();
}
Sever(S,tou,tou,wei,ch);
printf("******* 继续吗?(y or n)*********\n\n\n");
while((again=getch())!='y'&&again!='Y'&&again!='n'&&again!='N');
}while(again=='y'||again=='Y');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -