C++Primer Plus 第12章 类和动态内存分配::队列模拟----链表,堆栈,链表的方法的理解002

头文件定义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;
}

下一篇文章给出测试函数。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值