数据结构实验(C++)之队列(2)

    xiaoxiao2023-11-23  158

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

    代码:

    #include<iostream> using namespace std; const int MaxSize=100; template<class T> class Queue { public: Queue() { rear=MaxSize-1; len=0; lenth=0; } ~Queue() { } void EnQueue(T x); T DeQueue(); T GetQueue(); int Empty() { return len==0 ? 1: 0; } private: T data[MaxSize]; T rear; int len,lenth; }; template<class T> void Queue<T>::EnQueue(T x) { if(len==MaxSize) { throw 'x'; } rear=(rear+1)%MaxSize; data[rear]=x; len++; lenth=len; return; } template<class T> T Queue<T>::DeQueue() { int x,First; if(len==0) { throw 'y'; } First=((rear+MaxSize)-len+1)%MaxSize; x=data[First]; len--; lenth=len; return x; } template<class T> T Queue<T>::GetQueue() { int x,First; if(lenth==0) { throw 'y'; } First=((rear+MaxSize)-lenth+1)%MaxSize; x=data[First]; lenth--; return x; } template<class T> void Manager(int busNum,int truckNum,int totalNum,Queue<T> bus,Queue<T> truck,Queue<T> ferry) { cout<<"客车等待情况: "; while(true) { try{ cout<<bus.GetQueue()<<" "; }catch(char y) { break; } } cout<<endl; cout<<"货车等待情况: "; while(true) { try{ cout<<truck.GetQueue()<<" "; }catch(char y) { break; } } while(totalNum<MaxSize) { if(busNum<4 && !bus.Empty()) { ferry.EnQueue(bus.DeQueue()); totalNum++; busNum++; } else if(busNum<4 && bus.Empty() && !truck.Empty()) { ferry.EnQueue(truck.DeQueue()); totalNum++; truckNum++; busNum=0; } else if(busNum>=4 && !truck.Empty()) { ferry.EnQueue(truck.DeQueue()); totalNum++; truckNum++; busNum=0; } else if(busNum>=4 && truck.Empty() && !bus.Empty()) { ferry.EnQueue(bus.DeQueue()); totalNum++; truckNum=0; busNum++; } else break; } for(int i=0;i*10<MaxSize && !ferry.Empty();i++) { cout<<endl; cout<<"第"<<i+1<<"趟"<<"渡船装载情况: "; for(int j=0;j<10;j++) { try{ cout<<ferry.DeQueue()<<" "; }catch(char y) { break; } } } } int main() { int busNum=0,truckNum=0,totalNum=0; Queue<char> bus; Queue<char> truck; Queue<char> ferry; try{ for(int i=0;i<12;i++) bus.EnQueue('*'); }catch(char e) { cout<<"队列已满,客车不能入队!"<<endl; } try{ for(int i=0;i<11;i++) truck.EnQueue('#'); }catch(char e) { cout<<"队列已满,货车不能入队!"<<endl; } Manager(busNum,truckNum,totalNum,bus,truck,ferry); return 0; }

    最新回复(0)