您的位置:首页 > 其它

循环队列的一个简单实现

2009-10-07 03:40 393 查看
    这是笔试中遇到的一道题,要求实现循环队列,有入队,出队,判断是否为空,是否满等操作。
    分析:
    可以使用一个数组来存放循环队列,队头标记与队尾标记初始都为0,入队操作即队尾标记加1,若加1后相对循环等于队头则上溢;出队操作即队头标记加1,若加1后相对循环等于队尾则下溢;若队头标记等于队尾标记则为空;若队尾标记加1相对循环等于队头则为满。
    具体实现如下:
template     
class CirQueue      
{      
public:      
    enum {maxSize = 100};      
    CirQueue() {      
        front = rear = 0;      
    }      
    ~CirQueue(){      
    }      
    void EnQueue(T x){  // 入队      
        if ((rear+1) % maxSize == front) throw "上溢";      
        rear = (rear+1) % maxSize;      
        data[rear] = x;      
    }      
    T DeQueue(){        // 出队      
        if (rear == front) throw "下溢";      
        front = (front+1) % maxSize;      
        return data[front];      
    }      
    bool IsEmpty(){      
        return (front == rear) ? true : false;      
    }      
    bool IsFull(){      
        return ((rear+1)%maxSize == front) ? true : false;      
    }      
private:      
    int front, rear;      
    T data[maxSize];      
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: