Queue::定义

来源:互联网 发布:python rsa 私钥加密 编辑:程序博客网 时间:2024/05/20 05:28

Queue继承于List:

#include "../List/List.h" //以List为基类template <typename T> class Queue: public List<T> { //队列模板类(继承List原有接口)public: //size()、empty()以及其它开放接口均可直接沿用   void enqueue(T const& e) { insertAsLast(e); } //入队:尾部插入   T dequeue() { return remove(first()); } //出队:首部删除   T& front() { return first()->data; } //队首};

模拟银行服务:
银行窗口Queue<Customer>* windows = new Queue<Customer>[nWin]; //为每一窗口创建一个队列
顾客struct Customer { int window; unsigned int time; }; //顾客类:所属窗口(队列)、服务时长

int bestWindow(Queue<Customer> windows[], int nWin) { //为新到顾客确定最佳队列   int minSize = windows[0].size(), optiWin = 0; //最优队列(窗口)   for (int i = 1; i < nWin; i++) //在所有窗口中      if (minSize > windows[i].size()) //挑选出         { minSize = windows[i].size(); optiWin = i; } //队列最短者   return optiWin; //返回}
void simulate(int nWin, int servTime) { //按指定窗口数、服务总时间模拟银行业务   Queue<Customer>* windows = new Queue<Customer>[nWin]; //为每一窗口创建一个队列   for (int now = 0; now < servTime; now++) { //在下班之前,每隔一个单位时间      if (rand() % (1 + nWin)) { //新顾客以nWin/(nWin + 1)的概率到达         Customer c ; c.time = 1 + rand() % 98; //新顾客到达,服务时长随机确定         c.window = bestWindow(windows, nWin); //找出最佳(最短)的服务窗口/*DSA*/ToDo: 更精细的策略         windows[c.window].enqueue(c); //新顾客加入对应的队列      }      for (int i = 0; i < nWin; i++) //分别检查         if (!windows[i].empty()) //各非空队列            if (-- windows[i].front().time <= 0) //队首顾客的服务时长减少一个单位               windows[i].dequeue(); //服务完毕的顾客出列,由后继顾客接替            /*DSA*/displayProgress(windows, nWin, now); //显示当前各(窗口)队列情况            /*DSA*/delay > 0 ? //若命令行指定的时间间隔为正数            /*DSA*/  _sleep(delay) : //则做相应的延迟            /*DSA*/  getchar(); //否则,以手动方式单步演示   } //while   delete [] windows; //释放所有队列(此前,~List()会自动清空队列)}
0 0
原创粉丝点击