数据结构栈与队列的应用之汽车轮渡问题——自己的一些理解

本题摘自王道数据结构栈与队列的应用的课后题,题目如下:

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

乍一看题目好像很复杂,但是,仔细读一下,发现无非就是几种情况而已。从这个同类车先到先上船,我们就可以考虑到这道题需要利用队列FIFO的性质。

王道书中所给的算法设计思想是:假设数组q的最大下标为10,恰好是每次载渡的最大量。假设客车的队列是q1,货车的队列为q2。若q1充足,则每取4个q1元素后再取一个q2元素,直到q的长度为10。若q1不充足,则直接用q2补齐。算法的实现如下:

void Manager(SqQueue *q,SqQueue *q1,SqQueue *q2){
	char x;
	int i=0,j=0;//i表示渡船上的客车数量,j表示渡船上的总车辆数
	while(j<10){
		if(!IsEmpty(q1)&&i<4){
			DeQueue(&q1,&x);
			EnQueue(&q,x);
			i++;
			j++
		}
		else if(i==4&&!IsEmpty(q2)){
			DeQueue(&q2,&x);
			EnQ
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值