队列的应用题目

某机车轮渡口,过江渡船每次只能载10辆车过江。过江车辆分为客车类和货车类,上船有如下规定:同类车先到先上船,客车先于货车上船。且每上4条客车,才允许上一辆货车;若等待的客车不足4辆,则以货车代替,若没有货车等待则允许客车都上船。设计一个算法模拟渡口管理。

 

 

squeue *f(squeue *sq,char s[])
{
 squeue *p=(squeue *)malloc(100*sizeof(squeue)),*m=(squeue *)malloc(100*sizeof(squeue)),*t=(squeue *)malloc(100*sizeof(squeue));
 init(p);
 init(m);
 init(t);
 int i;
 for(i=0;i  {
  if(s[i]=='m')
   m->data[m->rear++]=s[i];
  else if(s[i]=='p')
   p->data[p->rear++]=s[i];
 }
 if(len(p)==0)
  return m;
 else if(len(m)==0)
  return p;
 else
 {
  if(len(p)<=4)
  {
   for(i=0;i    {
    p->data[p->rear]=m->data[i];
    p->rear++;
   }
   return p;
  }
  else if(len(p)>4 &&len(p)<8)
  {
   for(i=0;i<4;i++)
   {
    t->data[t->rear]=p->data[i];
    t->rear++;
   }
   t->data[t->rear]=m->data[0];
   t->rear++;
   for(i=4;i    {
    t->data[t->rear]=p->data[i];
    t->rear++;
   }
   for(i=1;i    {
    t->data[t->rear]=m->data[i];
    t->rear++;
   }
   return t;
  }
  else if(len(p)>=8 && len(p)<10)
  {
   for(i=0;i<4;i++)
   {
    t->data[t->rear]=p->data[i];
    t->rear++;
   }
   t->data[t->rear]=m->data[0];
   t->rear++;
   for(i=4;i<8;i++)
   {
    t->data[t->rear]=p->data[i];
    t->rear++;
   }
   if(len(m)==2)
    t->data[t->rear]=m->data[1];
   else if(len(m)==1)
    t->data[t->rear]=p->data[8];
   t->rear++;
   return t;

  }
 }
}

 

 

你可能感兴趣的:(算法--数据结构)