12.7 队列模拟
进一步了解类后,可将这方面的知识用于解决编程问题。Heather 银行打算在 Food Heap 超市开设一个自动柜员机(ATM)。FoodHeap超市的管理者担心排队等待使用ATM的人流会干扰超市的交通,希望限制排队等待的人数。Heather 银行希望对顾客排队等待的时间进行估测。要编写一个程序来模拟这种情况,让超市的管理者可以了解 ATM 可能造成的影响。
对于这种问题,最自然的方法是使用顾客队列。队列是一种抽象的数据类型(AbstractDataType,ADT)可以存储有序的项目序列。新项目被添加在队尾,并可以删除队首的项目。队列有点像栈,但栈在同一端进行添加和删除。这使得栈是一种后进先出(LIFO,last-in,first-out)的结构,而队列是先进先出(FIFO,first-in,frst-out)的。从概念上说,队列就好比是收款台或 ATM 前面排的队,所以对于上述问题,队列非常合适。因此,工程的任务之一是定义一个Queue类(第16章将介绍标准模板库类 queue,也将介绍如何开发自己的类)。
队列中的项目是顾客。Heather银行的代表介绍:通常,三分之一的顾客只需要一分钟便可获得服务。三分之一的顾客需要两分钟,另外三分之一的顾客需要三分钟。另外,顾客到达的时间是随机的,但每个小时使用自动柜员机的顾客数量相当稳定。工程的另外两项任务是:设计一个表示顾客的类;编写一个程序来模拟顾客和队列之间的交互(参见图12.7)。
12.7.1 队列类
首先需要设计一个Queue 类。这里先列出队列的特征:队列存储有序的项目序列:
1,队列所能容纳的项目数有一定的限制;
2,应当能够创建空队列;
3,应当能够检查队列是否为空;
4,应当能够检查队列是否是满的;
5,应当能够在队尾添加项目;
6,应当能够从队首删除项目;
7, 应当能够确定队列中项目数。
设计类时,需要开发公有接口和私有实现。
1.Queue 类的接口
从队列的特征可知,Queue 类的公有接口应该如下:
class Queue
{
enum {
Q_SIZE = 10 };
private:
//privat representation to be developed later
public:
Queue(int qs = Q_SIZE);
~