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; }