📄 theoperaterofcars.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#define stack_init_size 100
#define stackincrement 10
#define error 0
#define ok 1
#define overflow -2
//栈结构的定义
struct sqstack
{
int *base;
int *top;
int stacksize;
};
//创建一个空栈
int initstack(sqstack &s)
{
s.base=(int*)malloc(stack_init_size*sizeof(int));
if(!s.base) exit(overflow);
s.top=s.base;
s.stacksize=stack_init_size;
return 0;
}
//进栈操作
int push(sqstack &s,int e)
{
if((s.top-s.base)>=s.stacksize)
{
s.base=(int *)realloc(s.base,(s.stacksize+stackincrement)*sizeof(int));
if(!s.base) exit(overflow);
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
}
*s.top++=e;
return ok;
}
//退栈操作
int pop(sqstack & s,int &e)
{
if(s.top==s.base)
return error;
e=*--s.top;
return ok;
}
//打印出结果
void print(int b[],int n)
{
int k;
for(k=0;k<n;k++)
printf("%d" ,b[k]);
printf("\n");
}
//判断栈是否为空
int stackempty(sqstack s)
{
if(s.top==s.base)
return 1;
else return 0;
}
//递归算法求出所有可能的输出序列
void display(sqstack s,int a[],int b[],int p,int q,int n)
{
if(p<n)
{
push(s,a[p]);
display(s,a,b,p+1,q,n);
pop(s,b[q]);
}
if(!stackempty(s))
{
pop(s,b[q]);
display(s,a,b,p,q+1,n);
push(s,b[q]);
}
if(q>=n&&stackempty(s))
print(b,n);
}
int main ()
{
int i,n,a[stack_init_size];
int b[stack_init_size];
printf("请输入车厢的个数: ");
scanf("%d",&n);
sqstack s;
initstack(s);
for(i=0;i<n;i++)
a[i]=i+1;
printf("依次进栈序列为:\n");
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
printf("请输出车厢的序列号:\n");
display(s,a,b,0,0,n);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -