火车车厢重排/队列实现

来源:互联网 发布:李睿北医者怎么样知乎 编辑:程序博客网 时间:2024/05/01 05:25


#include"Squeue.cpp"
#define N 8
int main(){
    SqQueue H[N],Inqueue,Outqueue;//声明缓冲区队列,入轨队列,出轨对列
    int i,j,a,k,nextout,m,n,front;
    InitQueue(Inqueue);//初始化入轨队列
    InitQueue(Outqueue);//初始化出轨队列
    for(i=0;i<N;i++)//初始化缓冲队列
       InitQueue(H[i]);
    i=1;
    printf("输入车厢总数: ");
    scanf("%d",&k);
    printf("输入入轨顺序: ");
    while(i<=k){//对入轨队列进行赋值
        scanf("%d",&a);
        EnQueue(Inqueue,a);
        i++;
    }
    i=0;j=0;nextout=1;

    while(nextout<=k){//循环出轨
          if(!QueueEmpty(Inqueue)) DeQueue(Inqueue,a);//如果入轨队列非空,将入轨头元素出队
          for(j=0;j<N;j++){//检测缓冲区队列是否需要出队的头元素
               if(!QueueEmpty(H[j])) Getfront(H[j],front);//如果H[队列非空,将入轨头元素出队
               if(front==nextout){//如果出队元素是下一个标记元素,则将出队元素入到出轨队列,并将标记元素增加一
                    EnQueue(Outqueue,front);
                    nextout++;
               }
          }
          if(a==nextout) {//如果入轨头元素等于标记元素,将该元素入到出轨队列,并将标记元素增加一
               EnQueue(Outqueue,a);
               nextout++;
          }
          else{ //该操作完成将入轨对头元素入到缓冲区队列
                m=k+1;
                if(!QueueEmpty(H[0])) Getrear(H[0],m);//该操作和下边的for循环完成找到尾元素最大的缓冲区队列
                for(i=0;i<N;i++){
                   if(!QueueEmpty(H[i])){
                        Getrear(H[i],n);
                        if(m<n){m=n;j=i;}
                   }
                }
                if(m<a) EnQueue(H[j],a);//如果入轨头元素小于缓冲区对列最大尾元素,入队
                else {//否则,寻找空的缓冲区队列,并入队。
                      for(i=0;i<N;i++){
                          if(QueueEmpty(H[i])) {EnQueue(H[i],a);break;}
                      }
                      if(i>=N){printf("connot arrange!!"); break;}//如果没有空的缓冲区对列,输出cannot arrange
                }

          }
    }

    printf("出轨顺序:");
    while(!QueueEmpty(Outqueue)){//输出重拍后的出轨队列
        DeQueue(Outqueue,a);
        printf("%d ",a);
    }
    for(i=0;i<N;i++)//销毁所有队列
        DestroyQueue(H[i]);
    DestroyQueue(Inqueue);
    DestroyQueue(Outqueue);
     return 0;
}

 

 


 

原创粉丝点击