运行条件的代码看不太懂,求分析一下
#include<stdio.h>
#include<stdlib.h>
#define STACK_INI_SIZE 1000
#define STACKINEMENT 10
#define NULL 0
typedef struct
{
int *base;
int *top;
int stacksize;
int length;
}stack;
void initList(stack *s) //初始化栈
{
s->base=s->top=(int )malloc(STACK_INI_SIZEsizeof(int));
if(!s->base)
{
printf("开辟失败");
exit(1);
}
s->length=0;
s->stacksize=STACK_INI_SIZE;
}
void push(stack *s,int i) //插入栈顶元素
{
if(s->length==s->stacksize)
{
s->base=(int *)realloc(s->base,(STACK_INI_SIZE+STACKINEMENT)*sizeof(int));
s->length=STACK_INI_SIZE;
s->stacksize+=STACKINEMENT;
}
*(s->top)=i;
s->length++;
s->top++;
}
void pop(stack s) //输出栈顶元素
{
if(s->top==s->base)
{
printf("栈空无法删除错误");
exit(1);
}
s->top--;
printf("%d ",(s->top));
*(s->top)=NULL;
s->length--;
}
void operation(stack s) //运行条件
{
int a[1000],i,j,k,m,n,l,z,y,flag1=1,flag2=1;
char ch;
printf("** 欢迎您来解决车厢调度问题 **\n");
printf("请输入车厢数: ");
scanf("%d",&i);
flag1=1;
for(j=0;j<i*2;j++) //对数组初始化为10101010,即首组输出的数据为1234
{
a[j++]=1;
a[j]=0;
}
while(flag1) //总循环,输出所有满足条件的车厢调度
{
l=1,k=0;
for(j=0;j<i*2;j++) //输出车厢调度
{
if(a[j]==1)
push(s,l++);
else if(a[j]==0)
pop(s);
}
printf("\n");
for(j=0;j<i;j++) //判断是否已经满足结束条件,结束条件为11110000
if(a[j]==1) k++;
if(k==i) flag1=0;
a[i*2-1]++; //尾数自加1
while(flag2&&flag1)
{
z=1,m=0,n=0,y=1;
for(j=i*2-1;j>=0&&z;j--) //假如自加之后是2的话,前一位自加1,本位为0
if(a[j]!=2) z=0;
else{
a[j]=0;
a[j-1]++;
}
for(j=0;j<i*2&&y;j++) //检验新的组合是否满足需求
{
if(a[j]==1)
m++;
else if(a[j]==0)
n++;
else
printf("错误\n");
if(n>m)
y=0; //判断输出的时候栈是否为空,比如11000110
}
if(m==i&&n==i&&a[0]==1&&a[i2-1]==0&&y==1)
flag2=0;
else
a[i*2-1]++;
}
flag2=1;
}
}
//主函数
main()
{
void initList(stack *s);
void operation(stack *s);
stack s;
initList(&s);
operation(&s);
}
帮我分析一下那个代码是怎么运行的特别是10101010的初始化与初始数据有啥关系1234