【C++】队列的实现

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


posted @ 2014-12-01 22:51  corfox  阅读(191)  评论(0编辑  收藏  举报