queue.hpp<span style="white-space:pre"> </span>//定义队列类,C++类非常适合于描述
#ifndef QUEUE_HPP_INCLUDED
#define QUEUE_HPP_INCLUDED
typedef item_type Item;<span style="white-space:pre"> </span>//item_type为队列中的数据类型,可以是基本数据类型也可以是自己定义的类
class Queue
{
private:
struct Node{Item item;struct Node* next;}; //使用链表表示队列项
enum{Q_SIZE=10}; //队列的默认大小
Node* queueFront; //指向队列头
Node* queueRear; //指向队列尾
int items; //队列项目数
const int qSize; //队列大小
public:
Queue(int qSize=Q_SIZE);
~Queue();
bool isEmpty()const; //队列是否为空
bool isFull()const; //队列是否为满
bool addItem(const Item& item); //到达一个顾客
bool deleteItem(Item& item); //服务完一个顾客
int itemNumber()const; //队列中的顾客数目
};
#endif // QUEUE_HPP_INCLUDED
类方法的实现
queue.cpp
#include<cstdlib> //rand()
#include"queue.hpp"
Queue::Queue(int qs):qSize(qs)
{
queueFront=queueRear=NULL;
items=0;
}
Queue::~Queue()
{
Node* temp;
while(queueFront!=NULL)
{
temp=queueFront;
queueFront=queueFront->next;
delete temp;
}
}
bool Queue::isEmpty()const
{
return items==0;
}
bool Queue::isFull()const
{
return items==qSize;
}
int Queue::itemNumber()const
{
return items;
}
bool Queue::addItem(const Item& item)
{
if(isFull())
return false;
Node* add=new Node;
add->item=item;
add->next=NULL;
items++;
if(queueFront==NULL)
queueFront=add;
else
queueRear->next=add;
return true;
}
bool Queue::deleteItem(Item& item)
{
if(queueFront==NULL)
return false;
item=queueFront->item;
items--;
Node* temp=queueFront;
queueFront=queueFront->next;
delete temp;
if(items==0)
queueRear=NULL;
return true;
}
void Customer::set(long when)
{
processTime=std::rand()%3+1;
arrive=when;
}