头文件定义Customer类,Queue类
//queue.h -- interface for a queue
#ifndef QUEUE_H_
#define QUEUE_H_
//This queue will contain Customer items
class Customer
{
private:
long arrive; //arrival time for customer ,到达时间
int processtime; //processing time for customer排队时间
public:
Customer() { arrive = processtime = 0; }
void set(long when);
long when()const { return arrive; }
int ptime()const { return processtime; }
};
typedef Customer Item;
class Queue
{
private:
//class scope definitions
//Node is a nested structure definition local to this c
struct Node{Item item;struct Node* next;};
enum {Q_SIZE = 10};
Node* front; //pointer to front of queue
Node* rear; //pointer to rear of queue
int items; //current number of items in queue
const int qsize; //maximum number of items in queue
//preemptive definitions to prevent public copying
Queue(const Queue& q) :qsize(0) {}
Queue& operator=(const Queue& q) { return *this; }
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty()const;
bool isfull()const;
int queuecount()const;
bool enqueue(const Item& item);//add item to end
bool dequeue(Item& item); //remove item from front
};
#endif // !QUEUE_H_
类的方法的实现
//queue.cpp -- Queue and Customer methods
#include "queue.h"
#include<cstdlib> //or stdlib.h for rand();
//Queue mthods
Queue::Queue(int qs) :qsize(qs)
{
front = rear = NULL; //or nullptr
items = 0;
}
Queue::~Queue()
{
Node* temp;
while (front != NULL) //while queue is not yet empty
{
temp = front; //save address of front item
front = front->next;//reset pointer to next item
delete temp;
}
}
bool Queue::isempty()const
{
return items == 0;
}
bool Queue::isfull()const
{
return items == qsize;
}
int Queue::queuecount()const
{
return items;
}
//add item to queue
bool Queue::enqueue(const Item& item)
{
if (isfull())
{
return false;
}
Node* add = new Node;//create node
// on failure,new throws std::bad_alloc exception
add->item = item; //set node pointers
add->next = NULL; //or nullptr
items++;
if (front == NULL) //if queue is enpty
{
front = add; //place item at front
}
else
{
rear->next = add; //else place at rear
}
rear = add; //have rear point to new node
return true;
}
//Place front item into item variable and remove from queue
bool Queue::dequeue(Item& item)
{
if (front == NULL)
{
return false;
}
item = front->item; //set item to first item in queue
items--;
Node* temp = front; //save location of first item
front = front->next; //reset front to next item
delete temp;
if (items == 0)
{
rear = NULL;
}return true;
}
//time set to a random value in the rangs 1-3
void Customer::set(long when)
{
processtime = std::rand() % 3 + 1;
arrive = when;
}
下一篇文章给出测试函数。
11万+

被折叠的 条评论
为什么被折叠?



