Queue::定义

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()会自动清空队列)
}
时间: 2024-08-29 19:41:54

Queue::定义的相关文章

STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)

向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back() 传回最后一个数据,不检查这个数据是否存在. c.clear() 移除容器中所有数据. c.empty() 判断容器是否为空. c.front() 传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem) 在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(list) <list> 由节点组

C#基础---Queue(队列)的应用

   Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不通过,那么全部错误返回到界面,可能会让用户束手无策.我们有时候往往在一个流程中.只将Check流程中第一个不符合条件的错误提示给用户,让用户修改.首先我们就想到了队列,通过队列将所有的Check方法注册,然后依次出列.执行. Demo背景: XX公司招人,对员工的居住地点,姓氏,年龄都有要求. 一.

JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的文章,大多都是以罗列记忆点的形式书写的,没有谈论实现细节和逻辑原理.作为个人笔记无可厚非,但是并不利于他人学习.希望能通过这种比较“费劲”的讲解,帮助我自己.也帮助读者们更好地学习Java.掌握Java. 无论你跟我一样需要应聘,还是说在校学生学习Java基础,都对入门和进一步启发学习有所帮助.(关

stl源码分析之priority queue

前面两篇介绍了gcc4.8的vector和list的源码实现,这是stl最常用了两种序列式容器.除了容器之外,stl还提供了一种借助容器实现特殊操作的组件,谓之适配器,比如stack,queue,priority queue等,本文就介绍gcc4.8的priority queue的源码实现. 顾名思义,priority queue是带有优先级的队列,所以元素必须提供<操作符,与vector和list不同,priority queue允许加入元素,但是取出时只能取出优先级最高的元素. 一. pri

[ZZ] STL 整理(map、set、vector、list、stack、queue、deque、priority_queue) .

转自深秋的落叶 向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back()    传回最后一个数据,不检查这个数据是否存在. c.clear()     移除容器中所有数据. c.empty()   判断容器是否为空. c.front()     传回地一个数据. c.pop_back() 删除最后一个数据. c.push_back(elem)  在尾部加入一个数据. c[i] 等同于 c.at(i); 列表(l

UVa 540 queue的使用

背景:书上的思路很好,开始自己想的思路行不通,因为queue定义的操作太少,不可直接访问内部内容,也不可以插入. 思路:用了一个主队列,和一个队列数组.主队列里储存的是队名,每一个队名对应一个队列数组中的团体. 学习:1.用一个map来记录队员和队员的队名是十分好的方法,应为map内部是红黑树实现,查找效率是log(n). 代码: #include<iostream> #include<map> #include<string> #include<queue>

[Java] LinkedList / Queue - 源代码学习笔记

简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口的笔记,可以参考上一篇博文 List / ArrayList - 源代码学习笔记 Queue 1. 继承 Collection 接口,并提供了额外的插入.提取和查看元素的方法.新增的方法都有两种形式:当操作失败时,抛出异常或者返回一个特殊值.特殊值可以是 null 或者 false ,这取决于方法本

浅析 c# Queue

1.Queue定义 System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除. 2.优点 1.能对集合进行顺序处理(先进先出). 2.能接受null值,并且允许重复的元素. 3. Queue的构造器 构造器函数 注释 Queue () 初始化 Queue 类的新实例,该实例为空,具有默认初始容量(32)并使用默认增长因子(2.0). Queue (ICollection) 初始化 Queue 类的新实例,该实例包含从指

c# Queue

1.Queue定义 System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除. 2.优点 1.能对集合进行顺序处理(先进先出). 2.能接受null值,并且允许重复的元素. 3. Queue的构造器 构造器函数 注释 Queue () 初始化 Queue 类的新实例,该实例为空,具有默认初始容量(32)并使用默认增长因子(2.0). Queue (ICollection) 初始化 Queue 类的新实例,该实例包含从指

Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue

前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler异步通信传递机制(包括Looper.Message Queue) 目录 定义 Android提供的一套消息传递机制 作用 用于实现子线程对UI线程的更新,实现异步消息的处理: - 在新启动的线程中发送消息 - 在主线程中获取并处理信息 为什么要用Handler 在安卓开发中: - 为了保证Android的UI操作是线程安全的,Android规定了只允许UI线程修改Activity里的UI组件: - 但