⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 车厢调度3.cpp

📁 关于数据结构
💻 CPP
字号:
#include   <stdio.h>   
#include   <stdlib.h>   
    
  typedef   struct   SqStack   
  {   
  int   *top;   
  int   *base;   
  int   stacksize;   
  }SqStack;   
    
  struct   SqStack   stack;   
  int   trainsize;   
  int   trainsource[33];   
    
  void   Show(int   list_in[]);   
  void   Schedule(int   list_in[],int   source_num,int   list_num);   
    
    
  void   InitStack2(SqStack   *S,int   base_size)   
  {   
  S->base=(int   *)malloc(base_size   *   sizeof(int));   
  if(!S->base)   
  {   
  puts("分配内存失效!");   
  return   ;   
  }   
  S->top=S->base;   
  S->stacksize=base_size;   
  }   
    
  void   Push2(SqStack   *S,   int   e)   
  {   
  *(S->top++)=e;   
  }   
    
  void   Pop2(SqStack   *S)   
  {   
        int   e;   
  if(S->top==S->base)   
  {   
  puts("");   
  return   ;   
  }   
  e=*--S->top;   
  printf("%d   ",e);   
  }   
    
  void   TrainSchedule()   
  {   
  int   i;   
  int   trainlist[66];   
  printf("请输入车厢的序列的长度:");   
  scanf("%d",&trainsize);   
  if(trainsize<=0   ||   trainsize>=33)   
  {   
  puts("错误的长度!");   
  return;   
  }   
  for(i=0;i   <   trainsize;i++)   
  trainsource[i]=i+1;   
    
  for(i=0;i<66;i++)   
  trainlist[i]=-1;   
    
  Schedule(trainlist,1,0);   
  }   
    
  void   Schedule(int   list_in[],int   source_num,int   list_num)   
  {   
  int   i;   
  int   sum=0;   
  int   judge;   
  int   trainlist[50];   
  if(source_num   >   trainsize)   
  return;   
    
  for(i=0;i<50;i++)   
  trainlist[i]=-1;   
  for(i=0;i<=list_num-1;   i++)   
  {   
  trainlist[i]=list_in[i];   
  sum=sum+trainlist[i];   
  }   
    
  if(sum   !=   0)   
  {   
    
  trainlist[list_num]=1;   
  Schedule(trainlist,source_num+1,list_num+1);   
  for(i=0,judge=0;i<trainsize*2;i++)   
  judge=judge+trainlist[i];   
  if(source_num   ==   trainsize   &&   judge   ==   0)   
  Show(trainlist);   
    
  trainlist[list_num]=-1;   
  Schedule(trainlist,source_num,list_num+1);   
  for(i=0,judge=0;i<trainsize*2;i++)   
  judge=judge+trainlist[i];   
  if(source_num   ==   trainsize   &&   judge   ==   0)   
  Show(trainlist);   
  }   
  else   
  {   
  trainlist[list_num]=1;   
  Schedule(trainlist,source_num+1,list_num+1);   
  for(i=0,judge=0;i<trainsize*2;i++)   
  judge=judge+trainlist[i];   
  if(source_num   ==   trainsize   &&   judge   ==   0)   
  Show(trainlist);   
  }   
  }   
    
    
  void   Show(int   list_in[])   
  {   
  int   i,cur=0;   
  int   length;   
  SqStack   stack;   
  InitStack2(&stack,trainsize);   
  length=trainsize*2;   
  for(i=0;i<length;i++)   
  {   
  if(list_in[i]==1)   
  Push2(&stack,trainsource[cur++]);   
  else   if(list_in[i]==-1)   
  Pop2(&stack);   
  else   
  puts("error!");   
  }   
  puts("");   
  }   
    
    
  int   main()   
  {   
  TrainSchedule();   
  getchar();   
  getchar();   
  return   0;   
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -