资源简介

实现多服务台模拟类,同时统计得到服务台的平均服务时间,以及每个服务台的工作时间。

资源截图

代码片段和文件信息

#include 
#include 
#include 
using namespace std;

//队列的链式结构
template
class linkQueue
{
private:
    struct node
    {
        T data;
        node*next;
        node(const T&xnode*N=NULL){data=x;next=N;}
        node():next(NULL){}
        ~node(){}
    };
    node*f;
public:
    linkQueue(){ f=NULL; }
    ~linkQueue()
    {
        node*t;
        while(f!=NULL)
        { t=f; f=f->next; delete t; }
    }

    bool isEmpty(){ return f==NULL; }

    void enQueue(T &x)//插入
    {
        if( f==NULL ) f=new node(x);
        else{
            node*r=f;
            while(r->next!=NULL) r=r->next;
            r->next=new node(x);
        }
    }

    T deQueue()//删除
    {
        node*t=f; T value=f->data;
        f=f->next;
        delete t;
        return value;
    }

    T getHead()//取队首元素
    { T value=f->data; return value; }
};

//优先级队列定义
template 
class priorityQueue
{
public:

    //构造函数-空
    priorityQueue(int capacity=100)
        {
            array=new T[capacity];
            maxSize=capacity;
            currentSize=0;
        }

    priorityQueue(T data[]int size);
    ~priorityQueue() { delete []array; }

    bool isEmpty() { return currentSize==0; }
    void enQueue(T &x);
    T deQueue();
    T getHead() { return array[1]; }

    int findMin(T x);
    void decreaseKey(int i T value);

    void show()
    {
        cout<        for(int j=1; j<=currentSize; ++j)
            cout<        cout<    }

private:
    int currentSize;
    T *array;
    int maxSize;

    void doubleSpace();
    void buildHead();
    void percolateDown(int hole);
};

//插入
template 
void priorityQueue::enQueue(T & x)
{
    if(currentSize==maxSize-1) doubleSpace();
    // 向上过滤
    int hole=++currentSize;

    //在x大于空结点的父结点或已过滤到根时终止循环
    for(; hole>1 && x    array[hole]=array[hole/2];
    array[hole]=x;
}

//删除
template 
T priorityQueue::deQueue()
{
    T minItem;
    minItem = array[1];
    array[1] = array[currentSize--]; //将最后一个元素挪到根节点
    percolateDown(1); //向下过滤
    return minItem;
}

template 
void priorityQueue::percolateDown(int hole)
{
    int child;
    T tmp=array[hole];
    for(; hole*2<=currentSize; hole=child) //每次循环下移一层
    {
        child=hole*2; //指向左儿子
        if(child!=currentSize && array[child+1]        child++; //如果右儿子存在且小于左儿子,指向右儿子
        if(array[child]        else break;
      }
    array[hole]=tmp;
}

//堆构造
template 
void priorityQueue::buildHead()
{
    for(int i=currentSize/2; i>0; --i)
        percolateDown(i);//调用向下过滤
}

//构造函数-已存在某个数组
template 
priorityQueue::priorityQueue(T *itemint size)
    :maxSize(size+10)currentSize(size)
{
   

评论

共有 条评论