您的位置:首页 > 编程语言

第十二章编程练习(5)

2016-02-22 21:08 357 查看
QUEUE.h
#pragma once
#ifndef QUEUE_H_
#define QUEUE_H_
class Customer {
private:
int processtime;//顾客所需的服务时间
public:
Customer() { processtime = 0; };
void set();
int ptime()const { return processtime; }//只有使用成员函数才能访问类私有数据?友元:我也可以!我和成员函数基情满满的
};
typedef Customer Item;
class Queue {
private:
struct Node { Item item; struct Node * next; };//表链?链表 !
enum { Q_SIZE = 10 };
Node * front;//指向链表头
Node * rear;//指向上一个表
int items;//队列人数
const int qsize;//队列长度
Queue(const Queue &q) :qsize(0) {};//使用初始化列表的方式初始化私有常量
Queue & operator=(const Queue & q) { return *this; };//用了new 深度复制构造函数和赋值运算符少不了的啦
public:
Queue(int qs = Q_SIZE);
~Queue();//用了记得还 析构函数 你的忠实朋友!
bool isempty()const;//空?
bool isfull()const;//满!
int queuecount()const;//返回表的数量
bool enqueue(const Item & item);//创建一个表
bool dequeue(Item &item);//删除一个表
};
#endif

QUEUE.cpp
#include "queue.h"
#include <iostream>
void Customer::set()
{
processtime = std::rand() % 3+1;//顾客的处理时间设置为1~3分钟
}

Queue::Queue(int qs) :qsize(qs)
{
front = rear = nullptr;
items = 0;
}

Queue::~Queue()
{
Node *temp;
while (front != nullptr)
{
temp = front;
front = front->next;
delete temp;
}
}

bool Queue::isempty() const
{
return items == 0;
}

bool Queue::isfull() const
{
return items == qsize;
}

int Queue::queuecount() const
{
return items;
}

bool Queue::enqueue(const Item & item)
{
if (isfull())
return false;
Node * add = new Node;
add->item = item;
add->next = nullptr;
items++;
if (front == nullptr)
front = add;
else
rear->next = add;
rear = add;
return true;
}

bool Queue::dequeue(Item & item)
{
if (front == nullptr)
return false;
item = front->item;
items--;
Node * temp = front;
front = front->next;
delete temp;
if (items == 0)
rear = nullptr;
return true;
}

main.cpp
#include "queue.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
const int MIN_PER_HR = 60;
int main()
{
using namespace std;
srand(time(0));
cout << "Enter maximum size of queue: ";
int qs;
if (!(cin >> qs))//设置队列长度
exit(EXIT_FAILURE);
Queue line(qs);//初始化队列
cout << "Please enter the number of simulation hours: ";
int ctime;
if (!(cin >> ctime))//设置测试时长
exit(EXIT_FAILURE);
long hours = ctime*MIN_PER_HR;
Item temp;
temp.set();
line.enqueue(temp);
double cycle = temp.ptime();//初始化第一位顾客
unsigned long people = 1;
for (int i = 0; i < hours; i++)
{
if (!(line.isfull()))//当前一位顾客的服务时间还剩1分钟时就可以入队了
{
if (cycle == 1)
{
temp.set();
line.enqueue(temp);
cycle = temp.ptime() + 1;//顾客从入队到离队的时间,别忘了加上等待的时间
//cout << temp.ptime() << endl; ## 看看这随机数坑爹不?ORZ
people +=line.queuecount();
}
}
while (!(line.isempty()))
line.dequeue(temp);
cycle--;
}
cout << people << endl;//在设定时间内有多少顾客获得服务
cout << "Has " << people/ctime << " people!" << endl;//平均每小时的顾客数
system("pause");
return 0;
}


测试了3次 分别为100小时,200小时和300小时





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: