ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用循环数组高效地实现队列类

2020-05-06 16:56:18  阅读:254  来源: 互联网

标签:高效 队列 rhs cai back maxSize 数组 front circularArray


#include <iostream>
#include <vector>

//when array has maxSize-1 elements, it is full
template <typename Object>
class circularArray
{
private:
    std::vector<Object> vt;
    int front;
    int back;
    int maxSize;
public:
    circularArray()
    {
        maxSize=50;
        vt.resize(maxSize);
        front=0;
        back=0;
    }
    circularArray(int n)
        :maxSize(n)
    {
        vt.resize(maxSize);
        front=0;
        back=0; 
    } 
    ~circularArray()
    {
        while(front!=back)
            dequeue();
    }
    circularArray(const circularArray& rhs)
    {
        maxSize=rhs.maxSize;
        vt.resize(rhs.maxSize);
        front=rhs.front;
        back=rhs.back;
        for(int i=0;i!=maxSize-1;++i)
            vt[i]=rhs.vt[i];                
    }    
    const circularArray& operator=(const circularArray& rhs)
    {
        if(this==&rhs)
            return *this;
        *this(rhs);
        return *this;
    }
    void enqueue(const Object& x)
    {
        if((back+1)%maxSize==front)
        {
            std::cout << "queue is full\n";
            return;
        }
        vt[back]=x;
        back=(back+1)%maxSize;
    }
    const Object& dequeue()
    {
        if(front==back)
        {
            std::cout << "empty queue\n";
            return Object();
        }
        Object x = vt[front];
        front=(front+1)%maxSize;
        return x;
    }
    void print()
    {
        for(int i=front;i!=back;)
        {
            std::cout << vt[i] << ' ';
            i=(i+1)%maxSize; 
        }
        std::cout << '\n';
    }
}; 

int main()
{
    circularArray<int> cai;
    cai.enqueue(5);
    cai.enqueue(6);
    cai.enqueue(7);
    cai.enqueue(8);
    cai.dequeue();
    cai.print();
    circularArray<int> cai2=cai;
    cai2.print();
    return 0;
}

 

标签:高效,队列,rhs,cai,back,maxSize,数组,front,circularArray
来源: https://www.cnblogs.com/lhb666aboluo/p/12837320.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有