c语言队列渡船问题,渡船有关问题

当前位置:我的异常网» C语言 » 渡船有关问题

渡船有关问题

www.myexceptions.net  网友分享于:2013-03-06  浏览:22次

渡船问题!

一渡口,每条渡轮一次能装载6辆汽车过江,车辆分为客车、鲜货车和普通货车三类,规定;(1)同类汽车先到的先上船;(2)上船的优先级为:客车优先于鲜货车、鲜货车优先于普通货车;(3)每上三辆客车才允许上两辆鲜货车,然后再允许上一辆货车。若等待的客车不足三辆时,用鲜货车填补,当等待的鲜货车不足两辆时,按客车优先于普通货车的原则填补;当没有普通货车等待时,按客车优先于鲜货车的原则填补;(4)当装满六辆后则自动开船。

根据分析处理如下:

(1)汽车若渡江则根据汽车类型入队,假设:用1代表客车,2代表鲜货车,3代表普通货车。所以要设三个队列,用以区别汽车类型和到达的先后顺序,

汽车入队算法如下:

LQueqe   q1,q2,q3;

InitQueqe(q1);   InitQueue(q2);   InitQueue(q3);

void     carinque()   {   /*     汽车入队     */

int   i,x;

scanf(“%d,%d”,&i,&x);

if(x <1   ||   x> 3)     printf(“输入汽车类型错误\n”)   ;

else

{   switch(x)

{case   1:   EnQueue(q1,i);     break;   /*   客车进q1队   */

case   2:   EnQueue(q2,   i);     break;   /*   鲜货车进q2队   */

case   3:   EnQueue(q3,   i);     break;   /*   普通货车进q2队*/

}

}

}

(2)渡轮到后按规则上船,a[6]是开进渡轮车数组,算法如下:

int   carn1=carn2=carn3=0;

int     Inship(   )

{int   n;

n=carn1+carn2+carn3;

while   (!EmptyQueue(q1)   ||   !EmptyQueue(q2)   ||!EmptyQueue(q3))

{   while   (!EmptyQueue(q1)&&   n <6   &&   carn1 <3)

{   a[n++]=OutQueue(q1);carn1++;     }

if(n==6)   {   Print(a,n);   return   1;}   //print是一函数

while(!EmptyQueue(q2)   &&   n <6   &&   carn1+carn2 <5)

{a[n++]=OutQueue(q2);   carn2++;}

if(n==6)   {   Print(a,n);   return   1;}/*   满6辆则开船   */

if(!EmptyQueue(q3))

{   a[n++]=OutQueue(q3);     carn3++;}

if(n==6)   {   Print(a,n);   return   1;}

}   /*   While   */

if(carn1+carn2+carn3 <6)

printf( "渡轮上有%d辆车,继续等待......\n“

,carn1+carn2+carn3);

}/*   Inship   */

能提供的代码以上,那位大虾能帮我完成余下的部分????先谢啦

------解决方案--------------------

1.本程序中,将客车类定义一个队KE,货车类定义一个队HE,过江渡船定义成一个栈DC。栈采用顺序存储结构,队采用链式存储结构。

#define sqstack_maxsize 10

typedef struct sqstack

{DataType data[sqstack_maxsize];

int top;

}SqStackTp;

typedef struct linked_queue

{DataType data;

struct linked_queue *next;

}LqueueTp;

typedef struct queueptr

{LqueueTp *front,*rear;

}QueptrTp;

int InitStack(SqStackTp *sq) {sq-> top=0; return(1);}

void InitQueue (QueptrTp *lp)

{LqueueTp *p;

p=(LqueueTp * )malloc(sizeof(LqueueTp));

lq-> front=p;

lq-> rear=p;

( lq-> front)-> next=NULL;

}

int QutQueue(QueptrTp *lp,Data Type *x)

{LqueueTp *s;

if (lq-> front==lq-> rear) {error(“队空”);return(0);}

else {s=(lq-> front)-> nest;

*x=s-> data;

(lq-> front)-> next=s-> next;

文章评论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值