77 lines
1.3 KiB
C++
77 lines
1.3 KiB
C++
#include <iostream>
|
||
#include "LinkQueue.h"
|
||
using namespace std;
|
||
|
||
struct Car
|
||
{
|
||
int no; //车号
|
||
char type; //c:客车,t:货车
|
||
};
|
||
|
||
//求队列长度
|
||
template<class DT>
|
||
int QueueLength(LinkQueue<DT> Q)
|
||
{
|
||
int n = 0;
|
||
QNode<DT>* p = Q.front->next;
|
||
while (p)
|
||
{
|
||
p = p->next;
|
||
n++;
|
||
}
|
||
return n;
|
||
}
|
||
|
||
//车辆入队
|
||
void Ferry(LinkQueue<Car>& Qc, LinkQueue<Car>& Qt)
|
||
{
|
||
int i = 0;
|
||
Car e;
|
||
while (QueueLength(Qc) + QueueLength(Qt) > 0) //队列非空
|
||
{
|
||
if (QueueLength(Qc) > 0) //客车队列非空
|
||
{
|
||
while ((i < 4) && (QueueLength(Qc) > 0)) //客车数小于4且客车队列非空
|
||
{
|
||
DeQueue(Qc, e); //客车出队
|
||
cout << "车号:" << e.no << "\t类型:" << e.type << endl;
|
||
i++;
|
||
}
|
||
i = 0;
|
||
}
|
||
if (QueueLength(Qt) > 0) //货车队列非空
|
||
{
|
||
DeQueue(Qt, e); //货车出队
|
||
cout << "车号:" << e.no << "\t类型:" << e.type << endl;
|
||
}
|
||
}
|
||
cout << "所有车辆已过江!" << endl;
|
||
}
|
||
int main()
|
||
{
|
||
LinkQueue<Car> Qc, Qt;
|
||
Car e;
|
||
int i, n;
|
||
InitQueue(Qc);
|
||
InitQueue(Qt);
|
||
cout << "客车数:";
|
||
cin >> n;
|
||
for (i = 1; i <= n; i++) //客车入队
|
||
{
|
||
e.no = i;
|
||
e.type = 'c';
|
||
EnQueue(Qc, e);
|
||
}
|
||
cout << "货车数:";
|
||
cin >> n;
|
||
for (i = 1; i <= n; i++) //货车入队
|
||
{
|
||
e.no = i;
|
||
e.type = 't';
|
||
EnQueue(Qt, e);
|
||
}
|
||
Ferry(Qc, Qt); //车辆过江
|
||
DestroyQueue(Qc);
|
||
DestroyQueue(Qt);
|
||
return 0;
|
||
} |