队列循环实现(C++)

C++队列的循环实现:

复制代码
View Code
const int MAXQUEUE = 10;

template<class T>
class ZtkQueue {
public:
    ZtkQueue();
    bool empty() const;
    ErrorCode append(const T &x);
    ErrorCode serve();
    ErrorCode retrieve (T &x)const;
    bool full() const;
    int size() const;
    void clear();
    ErrorCode serve_and_retrieve(T &x);
private:
    int count;
    int rear;
    int front;
    T entry[MAXQUEUE];
};

template<class T>
ZtkQueue<T>::ZtkQueue():count(0),front(0),rear(MAXQUEUE-1)
{
}

template<class T>
ErrorCode ZtkQueue<T>::serve_and_retrieve(T &x)
{
    ErrorCode outcome = success;
    if(count > 0)
    {
        count--;
        x=entry[front];
        front = ((front+1)==MAXQUEUE)?0:front+1;
    }
    else
        outcome = underflow;
    return outcome;
}

template<class T>
void ZtkQueue<T>::clear()
{
    count=0;
    rear=MAXQUEUE - 1;
    front=0;
}

template<class T>
int ZtkQueue<T>::size() const
{
    return count;
}

template<class T>
bool ZtkQueue<T>::full() const
{
    if(count == MAXQUEUE)
        return true;
    else
        return false;
}

template<class T>
ErrorCode ZtkQueue<T>::retrieve(T &x) const
{
    ErrorCode outcome = success;
    if(!empty())
        x = entry[front];
    else
        outcome = underflow;
    return outcome;
}

template<class T>
ErrorCode ZtkQueue<T>::serve()
{
    ErrorCode outcome = success;
    if(count>0)
    {
        count--;
        front = ((front+1)==MAXQUEUE)?0:front+1;
    }
    else
        outcome = underflow;
    return outcome;
}

template<class T>
bool ZtkQueue<T>::empty()const
{
    if(count>0)
        return false;
    else
        return true;
}

template<class T>
ErrorCode ZtkQueue<T>::append(const T &x)
{
    ErrorCode outcome = success;
    if(count < MAXQUEUE)
    {
        count++;
        rear = ((rear+1)==MAXQUEUE)?0:rear+1;
        entry[rear]=x;
    }
    else
        outcome = overflow;
    return outcome;
}
复制代码

 

posted @   zhoutk  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示