Queue::定义

38 篇文章 1 订阅
22 篇文章 0 订阅

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值